字节对齐问题_第2页

考试站(www.examzz.com)   【考试站:中国教育考试第一门户】   2013年8月14日

  a    b

  TestStruct4的内存布局:1***, 1111

  c     TestStruct4.a   TestStruct4.b                    d

  TestStruct5的内存布局: 1***,       1***,           1111,        ****,       11111111

  这里有三点很重要:

  首先,每个成员分别按自己的方式对齐,并能最小化长度。

  其次,复杂类型(如结构)的默认对齐方式是它最长的成员的对齐方式,这样在成员是复杂类型时,可以最小化长度。

  然后,对齐后的长度必须是成员中最大的对齐参数的整数倍,这样在处理数组时可以保证每一项都边界对齐。

  补充一下:

  对于数组,比如:char a[3],它的对齐方式和分别写 3个 char 是一样的,也就是说它还是按 1 个字节对齐。如果写:typedef char Array3[3];Array3 这种类型的对齐方式还是按 1 个字节对齐,而不是按它的长度。


首页 1 2 尾页

相关文章