结构体字节对齐

四个重要的基本概念:

     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}。

 

posted @ 2019-03-17 13:24  cicero  阅读(851)  评论(0编辑  收藏  举报