首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言結構體位元組對齊與大小計算規則詳解

     編輯:關於C語言

結構體大小並非單純成員大小之和,而是受「對齊規則」支配:結構體總大小必須是「最大成員類型大小」的整數倍,且各成員偏移量需滿足自身對齊需求。

實例演算

typedef struct Student {
    short id;       // 2 bytes
    char  name[15]; // 15 bytes
    int   age;      // 4 bytes
    char  num;      // 1 byte
} Student;
  1. id 偏移 0,大小 2
  2. name[15] 偏移 2,大小 15 → 佔用 2~16
  3. age 需 4-byte 對齊,下一個 4 的倍數是 20,故偏移 20,大小 4 → 佔用 20~23
  4. num 偏移 24,大小 1 → 佔用 24
  5. 目前總計 25 bytes,最大成員 int 為 4 bytes,補齊到 28(4 的倍數)

結論:sizeof(Student) = 28 bytes

核心規則速查

  • 結構體起始位址為最大成員對齊數的倍數
  • 每個成員偏移量必須是自身大小的倍數(或編譯器指定的打包對齊數)
  • 結構體總大小為最大對齊數的倍數,不足補齊
  • #pragma pack(n) 可強制指定對齊數,但可能導致非對齊存取效能下降

驗證技巧

編譯後可用 offsetof 巨集或觀察編譯器輸出的映像檔 .bss/.data 區段大小確認實際佈局。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved