您的位置:首页 > 其它

sizeof()与内存对齐问题小探讨

2010-10-13 21:48 218 查看
关于sizeof输出问题

看下面一个例子:

int main()

{

  char *ss1 = "0123456789";

  char ss2[] = "0123456789";

   char ss3[100] = "0123456789";

  //内存对齐问题

  struct { int a; char b; int c; char d; }st1;

  struct { int a[10]; char b; char c; }st2;

  printf("length1: %d;length2: %d; length3: %d, length4: %d, length5: %d\n",sizeof(ss1),sizeof(ss2), \

  sizeof(ss3), sizeof(st1),sizeof(st2));

  return 0;

}

结果为4,11,100,16,48.

因为ss1首先是一个指针变量,它指向一个字符串,而sizeof输出的是给它传递的变量的长度,因此结果是4;

而对ss2来说,它是一个数组,它的长度未定义,因此要根据字符串的长度来算,再加上一个结束'\0',因此是11;

对于ss3它是一个有固定长度100的字符串,因此输出100;

对于结构体变量st1,与st2来说,默认情况下,为了便于对结构体内元素的访问与管理,当结构体内的元素的长度都小于处理器的位数时,便以最长的元素为对齐单位,也就是说结构体的长度一定是最长的数据元素的整数倍,就是st1里,那么每个元素都占4字节;如果结构体内存在长度大于处理器位数的元素如数组a[12],它的长度为12*4=48,那么此时则用处理器的位数为对齐单位,也就是小于处理器的每个元素的长度为4,大于处理器位数的元素的长度为4的倍数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: