1、对齐原则
min(sizeof(word ), 4) = 2,因此是 2 字节对齐,而不是我们认为的 4 字节对齐。
1)每个成员分别按自己的方式对齐,并能最小化长度;
2)复杂类型(如结构)的默认对齐方式是它最长的成员的对齐方式,这样在成员是复杂类型时,可以最小化长度;
3)对齐后的结构体整体长度必须是成员中最大的对齐参数的整数倍,这样在处理数组时可以保证每一项都边界对齐。
对于数组,比如 char a[3]:
它的对齐方式和分别写 3 个 char 是一样的,也就是说它还是按 1 个字节对齐;
如果是 typedef char Array3[3]:
Array3 这种类型的对齐方式还是按 1 个字节对齐,而不是按它的长度;
不论类型是什么,对齐的边界一定是 1,2,4,8,16,32,64.... 中的一个。
2、#pragma pack 作用
指定结构体、联合以及类成员的对齐 packing alignment;
|