struct里面的sizeof计算总结

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的整数倍。

你可能感兴趣的:(c,优化,struct,gcc)