结构体对齐规则:
(1) 结构体变量的首地址一定 是这个结构体变量中 最大的基础(内置)类型的大小的整数倍
(2) 结构体变量中每一个成员 相对于结构体首地址的偏移 一定是该成员的基础数据类型大小的整数倍
(3) 结构体变量的总大小 一定是这个结构体变量中 最大的基础类型的大小的整数倍
如果允许修改默认对齐大小,则规则变更:
(1) 结构体变量的首地址一定 是这个结构体变量中 Min(最大的基础(内置)类型的大小, 默认的对齐规则大小)的整数倍
(2) 结构体变量中每一个成员 相对于结构体首地址的偏移 一定是该成员的min(基础数据类型大小, 默认的对齐规则大小)的整数倍
(3) 结构体变量的总大小 一定是这个结构体变量中 Min(最大的基础类型的大小, 默认的对齐规则大小)的整数倍
默认的内存对齐大小 :vs默认8字节 gcc默认4字节
#pragma pack(4) //修改默认大小为4
#pragma pack()//恢复默认大小