為提高 CPU 內存存取效率,編譯器按特定規則安排變量地址。如 int (4 字節) 地址若非 4 的倍數,需兩次總線讀取並拼裝,效率大降。
sizeof(類型)。#pragma pack(n) 可指定最大對齊值,實際對齊 = min(sizeof(成員), n)。#pragma pack(1) // 指定 1 字節對齊
struct TEST_A {
int a; // sizeof=4, align=min(4,1)=1
char b; // sizeof=1, align=1
}; // 大小 = 5,無填充
#pragma pack() // 恢復默認
// 默認對齊 (通常 4/8)
struct TEST_B {
int a; // offset 0
char b; // offset 4
// 填充 3 字節
// 大小 = 8
};
理解對齊有助於優化內存佈局、避免跨平台兼容性問題。