内存对齐的三个规则:
1. 结构体变量的起始地址能够被最宽的成员大小整除
2. 结构体的每个成员相对于起始的地址的偏移量能够被其自身的大小整除 如果不能则在前一个成员的后面补充字节
3. 结构体的总体大小能够被最宽的成员大小整除如果不能则在后面补充字节
例子:
struct E1
{
int a;
char b;
char c;
}
如果E1 的首地址是0x00且int a 字节占4个字节 则占用地址为0~3 那么char b 从0x04开始,能够整除1 下面char c被放入了0x05 可是这个地址不能够被4个字节的int a整除 所以应该补充到8 所以这个结构体是8