結構體字節對齊

牢記兩條基本規則

規則一:基本成員對齊

第一個放在偏移爲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(),取消自定義字節對齊方式。

發佈了37 篇原創文章 · 獲贊 13 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章