1. 程式人生 > >結構體字節對齊

結構體字節對齊

har 細節 ble adding ack 結構體字節對齊 結構體 一個 char

四個重要的基本概念:

1) 數據類型自身的對齊值:char型數據自身對齊值為1字節,short型數據為2字節,int/float型為4字節,double型為8字節。

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

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

4) 數據成員、結構體和類的有效對齊值:自身對齊值和指定對齊值中較小者,即有效對齊值=min{自身對齊值,當前指定的pack值}。

結構體字節對齊的細節和具體編譯器實現相關,但一般而言滿足三個準則:

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

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

3) 結構體的總大小為結構體最寬成員大小的整數倍,如有需要編譯器會在最末一個成員之後加上填充字節{trailing padding}。

結構體字節對齊