struct 里面的sizeof的计算
如struct exap
{
short a;
double b;
char c;
double d;
int e;
}size;
sizeof(struct exap)=? 40
秘诀:方法一:
short只能存在2的倍数里面
double只能存在8的背书里面
char只能存在1的倍数里面
int只能存在4的倍数里面
在这基础上,还必须的遵循数据有效对齐。
方法二:
在vc里面规定的是8字节对齐,如果struct里最长变量<8,就以最长的字节对齐计算,如果struct里面最长的>=8,就以8字节对齐计算;
在gcc里面进行了优化,规定是4字节对齐,如果struct里面最长变量<4,就以最长的字节对齐计算,如果struct里面的最长的>=4,就以4字节对齐计算;
补充:这里还可以可以通过#pragma pack()来更改以上规则。例如:#pragma pack(1),则以上规则变为:1)偏移量必须为1的倍数;2)为对象分配的字节数必须为1的整数倍。