結構體大小並非單純成員大小之和,而是受「對齊規則」支配:結構體總大小必須是「最大成員類型大小」的整數倍,且各成員偏移量需滿足自身對齊需求。
typedef struct Student {
short id; // 2 bytes
char name[15]; // 15 bytes
int age; // 4 bytes
char num; // 1 byte
} Student;
id 偏移 0,大小 2name[15] 偏移 2,大小 15 → 佔用 2~16age 需 4-byte 對齊,下一個 4 的倍數是 20,故偏移 20,大小 4 → 佔用 20~23num 偏移 24,大小 1 → 佔用 24int 為 4 bytes,補齊到 28(4 的倍數)結論:sizeof(Student) = 28 bytes
#pragma pack(n) 可強制指定對齊數,但可能導致非對齊存取效能下降編譯後可用 offsetof 巨集或觀察編譯器輸出的映像檔 .bss/.data 區段大小確認實際佈局。