結構體位元組對齊

2022-03-20 05:07:53 字數 441 閱讀 9699

四個重要的基本概念:

1) 資料型別自身的對齊值:char型資料自身對齊值為1位元組,short型資料為2位元組,int/float型為4位元組,double型為8位元組。

2) 結構體或類的自身對齊值:其成員中自身對齊值最大的那個值。

3) 指定對齊值:#pragma pack (value)時的指定對齊值value。

4) 資料成員、結構體和類的有效對齊值:自身對齊值和指定對齊值中較小者,即有效對齊值=min。

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

2) 結構體每個成員要對齊到對齊數的整數倍,對齊數為編譯器預設對齊數與該成員大小中的較小值。預設對齊數可以通過#pragma pack()修改。但只能改成1,2,4,8,16

3) 結構體的總大小為結構體最寬成員大小的整數倍,如有需要編譯器會在最末乙個成員之後加上填充位元組。

結構體位元組對齊

include pragma pack 2 struct t.pragma pack int main int argc,char argv 最後輸出的結果為 8。這個表示是按照2位元組來對齊資料,首先分配2位元組給成員變數i,分配完成後,還剩一位元組,zj add補0 沒法容納成員變數d,此時會再...

結構體位元組對齊

include pragma pack 2 struct t.pragma pack int main int argc,char argv 最後輸出的結果為 8。這個表示是按照2位元組來對齊資料,首先分配2位元組給成員變數i,分配完成後,還剩一位元組,zj add補0 沒法容納成員變數d,此時會再...

結構體位元組對齊

在用sizeof運算子求算某結構體所佔空間時,並不是簡單地將結構體中所有元素各自佔的空間相加,這裡涉及到記憶體位元組對齊的問題。從理論上講,對於任何 變數的訪問都可以從任何位址開始訪問,但是事實上不是如此,實際上訪問特定型別的變數只能在特定的位址訪問,這就需要各個變數在空間上按一定的規則排列,而不是...