結構體對齊(全)

2021-10-09 05:23:35 字數 641 閱讀 1603

1、第乙個成員在與結構體偏移量為0的位址處;

2、其他成員變數要與自身型別的整數倍位址處對齊;

3、結構體總大小為要與 「處理器位元組數與成員型別所佔位元組數最大的最小值」 的整數倍對齊;

4、如果出現巢狀情況,巢狀的結構體對齊到自己的最大對齊數的整數倍處,結構體的整體大小就是所有最大對

齊數(含巢狀結構體的對齊數)的整數倍。

5、#pragma pack(n) 可以用來控制預設對齊數的大小

1、如果相鄰位域字段的型別相同,且其位寬之和小於型別的sizeof的大小,則後面的字元將緊鄰前乙個字段

儲存,直到不能容納為止。

2、如果相鄰位域的型別相同,但其位寬之和大於型別的sizeof大小,則後面的字段將從新的儲存單元開始,

其偏移量為其型別大小的整數倍。

3、如果相鄰的位域字段的型別不同,不同的編譯器具體實現有差異,vc6採取不壓縮的方法,

dev-c++,gcc的壓縮方式

4、如果位域字段之間穿插著非位域字段,則不壓縮。

5、整個結構體的大小為最寬基本型別成員大小的整數倍。

結構體對齊

現在去掉第乙個成員變數為如下 pragma pack 4 class testc int nsize sizeof testc 按照正常的填充方式nsize的結果應該是8,為什麼結果顯示nsize為6呢?事實上,很多人對 pragma pack的理解是錯誤的。pragma pack規定的對齊長度,實...

結構體對齊

結構體對齊問題 以下結論均在gnu gcc上驗證 概念 偏移量 成員位址相對結構體位址的偏移 對齊原則 1.結構體中某成員的偏移量必須是該成員型別大小的整數倍 b 的偏移量必須是 short 大小的整數倍,故在 a 後面填充乙個位元組 c 的 型別大小是double,在ansi c中,c 的偏移量是...

結構體對齊

結構體對齊方式 1.pragma pack x 32系統預設值4,結構體元素最大長度,取三者最小值,作為每個元素對齊計算的值的倍數,並且總和是最小值的倍數!假的 於2015 12 26 修改 1.資料成員對齊原則 結構或聯合的資料成員,第乙個資料成員放在offset為0的地方,以後每個成員按照 pr...