結構體對齊

2021-10-18 21:34:35 字數 309 閱讀 7547

1.第乙個成員在結構體變數偏移量為0 的位址處,也就是第乙個成員必須從頭開始。

2.其他成員變數要對齊到某個數字(對齊數)的整數倍的位址處。對齊數 為編譯器預設的乙個對齊數與該成員大小中的較小值。vs中預設值是8 linux預設值為4(當然可以通過#pragma pack()修改),但修改只能設定成1,2,4,8,16.

3.結構體總大小為最大對齊數的整數倍。(每個成員變數都有自己的對齊數)

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

更加詳細介紹:

結構體對齊

現在去掉第乙個成員變數為如下 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...