結構體對齊規則

2021-07-02 13:35:44 字數 763 閱讀 9275

結構體對齊規則:

(1)第乙個成員在與結構體變數偏移量為0處

(2)其他成員變數需要對齊到某個數字(對齊數)的整數倍的位址處

對齊數=編譯器預設的乙個對齊數與該成員大小的較小值

vs中預設為8

(3)結構體總大小為最大對齊數(每個成員變數除了第乙個成員都有乙個對齊數)的整數倍

(4)如果巢狀了結構體的情況,巢狀的結構體對齊到自己的最大對齊數的整數倍,結構體的整體大小就是所有最大對齊數(含巢狀結構體的對齊數)的整數倍

#include #include struct a

;struct b

;//在d中宣告乙個a的成員

struct d

;//在aa中巢狀乙個bb

struct aa

; char c;

};struct dd

;int main()

*offsetof函式作用是 從其父結構體的開頭檢索成員的偏移量

結構體對齊規則

結構體對齊 pragma pack 4 結構體的長度 sizeof 乙個沒有考慮周詳的位段結構體中,可能存在大量 縫隙 1.實際對齊值決定系統一次劃分記憶體的位元組數量。系統為變數分配記憶體時,必須先劃分夠變數資料型別需要的對齊空間 對齊模數,位元組單位 2.結構體的實際對齊值為結構體中最大的資料型...

結構體對齊規則

結構體預設的位元組對齊一般滿足三個準則 1 結構體變數的首位址能夠被其最寬基本型別成員的大小所整除 2 結構體每個成員相對於結構體首位址的偏移量 offset 都是成員自身大小的整數倍,如有需要編譯器會在成員之間加上填充位元組 internal adding 每乙個元素放置到記憶體中時,它都會認為記...

結構體對齊規則

1 資料成員對齊規則 結構或聯合的資料成員,第乙個資料成員放在offset為0的地方,以後每個資料成員的對齊按照 pragma pack指定的數值和這個資料成員自身長度中,比較小的那個進行。2 結構或聯合的整體對齊規則 在資料成員完成各自對齊後,結構或聯合本身也要進行對齊,對齊將按照 pragma ...