结构体对齐规则
1.结构体变量的首地址一定 是这个结构体变量中 最大的基础(内置)类型的大小的整数倍
2.结构体变量中每一个成员 相对于结构体首地址的偏移 一定是该成员的基础数据类型大小的整数倍
3.结构体变量的总大小 一定是这个结构体变量中 最大的基础类型的大小的整数倍如果允许修改默认对齐大小,则规则变更:
1.结构体变量的首地址一定 是这个结构体变量中 Min(最大的基础(内置)类型的大小, 默认的对齐规则大小)的整数倍
2.结构体变量中每一个成员 相对于结构体首地址的偏移 一定是该成员的Min(基础数据类型大小, 默认的对齐规则大小)的整数倍
3.结构体变量的总大小 一定是这个结构体变量中 Min(最大的基础类型的大小, 默认的对齐规则大小)的整数倍默认的内存对齐大小 :vs默认8字节 gcc默认4字节
#pragma pack(4) //修改默认大小为4,只对在它之下的结构体有效
#pragma pack()//恢复默认大小
例1:
struct A
{
char a; // 偏移量为 1
int b;//偏移量为1 ,数据类型大小为4 .此时该偏移量 1 不是 数据类型 4 的整数倍,所以给char a