結構體對齊

2022-09-17 06:30:13 字數 625 閱讀 3291

一:結構體資料成員對齊的意義:

實際的計算機系統對基本型別資料在記憶體中的位置有限制,要求這些資料的起始位址是某個數k的整數倍,這就是所謂的記憶體對齊,這個k稱為該資料型別的對齊模數

這種要求可以簡化處理器與記憶體之間傳輸系統的設計,還可以提公升讀取的速度

二:結構體對齊兩方面含義

結構體總長度

結構體內各資料成員的記憶體對齊

三:結構體大小的計算方法過和步驟

1):將結構體內所有資料成員的長度相加

2):各資料成員為了記憶體對齊而填充的位元組數加到總長度中

3):結構體對齊,結構體的總長度也應該是某個模數的整數倍,這個模數是  min(結構體中最長資料的長度,pragma pack)

4):在windows和linux系統中,模數的長度不同

例子:#ragma pack(8)

strucy

char a;

long double b;

int c;

windows下

1+4+8 = 13

13+7 = 20

20+4 = 24

結構體對齊

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