位元組對齊原則

2021-05-22 23:14:51 字數 368 閱讀 1043

位元組對齊原則

結構體預設的位元組對齊一般滿足三個準則:

1) 結構體變數的首位址能夠被其最寬基本型別成員的大小所整除; 2) 結構體每個成員相對於結構體首位址的偏移量(offset)都是成員大小的整數倍,如有需要編譯器會在成員之間加上填充位元組(internal adding); 3) 結構體的總大小為結構體最寬基本型別成員大小的整數倍,如有需要編譯器會在最末乙個成員之後加上填充位元組(trailing padding)。

通過這三個原則,就不難理解下面兩個struct的差異了.

結構體(struct)的sizeof值,並不是簡單的將其中各元素所佔位元組相加,而是要考慮到儲存空間的位元組對齊問題。先看下面定義的兩個結構體. struct s1; struct s2;

位元組對齊原則

一 簡單型別 char 偏移量必須為sizeof char 即1的倍數,可以任意位址開始儲存 short 偏移量必須為sizeof short 即2的倍數,只能從0,2,4.等2的倍數的位址開始儲存 int 偏移量必須為sizeof int 即4的倍數,只能從0,4,8.等4的倍數的位址開始儲存 f...

記憶體位元組對齊原則

請牢記以下3條原則 在沒有 pragma pack巨集的情況下,務必看完最後一行 資料成員對齊規則 結構 struct 或聯合 union 的資料成員,第乙個資料成員放在offset為0的地方,以後每個資料成員儲存的起始位置要從該成員大小或者成員的子成員大小 只要該成員有子成員,比如說是陣列,結構體...

記憶體位元組對齊原則 總結

似乎每一家企業在招聘的時候都很關注這個問題,無論在筆試還是面試都會提及。zz最近找工作就經常遇到這樣的問題,儘管之前有去了解過,但自己沒有總結過,還是回答錯了這才想起來總結了,為時不晚吧。位元組對齊的原則主要有倆條 在沒有 pragma pack的情況下 1 sizeof的最終結果必然是結構內部最大...