C++结构体的字节对齐规则(一)

2014-03-10 12:51:40 · 作者: · 浏览: 229

  对于结构体的空间对齐规则,我刚开始的理解是:系统对于每种不同类型的变量,都会分配相同的空间(有些系统会分配4个字节,有些系统会分配8个字节)

  但是!!这个理解是大错特错的,因为所谓的结构体的空间对齐规则正确的理解应该是:

  1.系统在为结构体变量分配空间的时候,先会判断结构体中那个类型的成员所占的空间大小最大并以那个字节作为空间对齐的字节。(若表述难理解,可参考以下例子)

  2.每个变量的起始地址都能被自身的大小整除。

  (若表述难理解,可参考以下例子)(本文中涉及到地址,一般都以最后两位来描述)

  例子1:

  1 #include

  2

  3 struct napo{

  4 int napo1;

  5 char napo2;

  6 int napo3;

  7 char napo4;

  8 }napolin;

  9

  10

  11 int main(void)

  12 {

  13 printf("addr of int napo1:%p\n", &napolin.napo1);

  14 printf("addr of char napo2:%p\n", &napolin.napo2);

  15 printf("addr of int napo3:%p\n", &napolin.napo3);

  16 printf("addr of char napo4:%p\n", &napolin.napo4);

  17 printf("size of struct napolin:%d\n", sizeof(napolin));

  18

  19 return 0;

  20 }

  执行的结果:

  addr of int napo1:0x8049720

  addr of char napo2:0x8049724

  addr of int napo3:0x8049728

  addr of char napo4:0x804972c

  size of struct napolin:16