-
结构体内存对齐遵循如下规则
(1)第一个成员在结构体变量偏移量为0的地址处,也就是第一个成员必须从头开始;
(2)其他成员的偏移量为自身大小的整数倍;
(3)结构体总大小对最大对齐数(通过最大成员来确定)的整数倍;
struct A
{
char a; //1个字节,[0]
double b; //8个字节,偏移到8的整数倍开始,[8-15]
bool c; //1个字节,[16]
int d; //4个字节,偏移到4的整数倍开始,[20-23]
float e; //4个字节,偏移到4的整数倍开始,[24-28]
};
//最大对齐数为8,所以A的大小为32
struct B
{
char a;
double b[128];
};
//sizoef(B)=1032