牢記兩條基本規則
規則一:基本成員對齊
第一個放在偏移爲0的地方;以後的每個成員按 MIN(指定對齊長度, 自身長度)對齊;
其中, 基本成員指的是機器所能識別的最小數據類型(整型、浮點型、指針等),不包含重新定義的數據類型及組合的數據類型,即如果結構體內包含數組或者是嵌套了結構, 需要將其原樣展開。
struct
{
char a[5];
}test;
基本成員不是數組a, 而是數組的單個元素,即a[0]、a[1]...
即基本成員對齊長度是char,即1, 而不是5
規則二:結構體整體對齊
MIN(指定對齊長度, 最大成員長度)對齊,不足末尾補齊。
指定對齊長度,缺省同機器位數,如32位機器,就是4字節
一般地,可以通過僞指令#pragma pack(n) 來改變缺省的對齊:
#pragma pack(n),編譯器將按照n個字節對齊;
#pragma pack(),取消自定義字節對齊方式。