C++结构体内存对齐基本原则
C++结构体内存对齐基本原则
-
1.第一个成员在结构体变量偏移量为0 的地址处,也就是第一个成员必须从头开始。
-
2.其他成员的偏移量为自身大小的整数倍。
-
3.结构体总大小对最大对齐数(通过最大成员来确定)的整数倍。
实例1(论证原则2)
struct Data
{
char arg1;
int arg2;
};
Data Size: 8
int为4Byte,char为1Byte,计算来看arg2的偏移量为1,根据原则2,char需要补齐3Byte来保证int对齐。
实例2(论证原则3)
struct Data
{
char arg1;
int arg2;
char arg3;
};
Data Size: 12
并不是按照操作系统区分的win为8的整数倍。而是按照成员变量最大的整数倍。
实例3(综合论证)
struct Data
{
char arg0[14];
double arg1;
int arg2;
char arg3;
double arg4;
};
Data Size: 40
arg1为8Byte,arg0占据14Byte,因此需要补齐到16Byte,arg2不需要补齐,为4Byte,char占据1Byte,这时 arg4计算得到的偏移量为28+1=29,自身占据8Byte,因此需要补齐到32Byte。
总体计算Data Size: 14+(2)+8+4+1+(3)+8=40.