这个sizeof(foo)结果是6,为什么?按网上说的说法不应该是每个以8分隔,应该是24呀,这里是为什么?
#pragma pack(8)
struct foo
{
char c1;
short s;
char c2;
// int i;
};
#pragma pack()
char 是1字节,short是2字节
#pragma pack(8),那这句话指定8字节对其还有什么意义呢?
#pragma pack有这么一个规则:
结构、联合或者类的数据成员,第一个放在偏移为0的地方;以后每个数据成员的对齐,按照#pragma pack指定的数值和这个数据成员自身长度两个中比较小的那个进行;也就是说,当#pragma pack指定的值等于或者超过所有数据成员长度的时候,这个指定值的大小将不产生任何效果;
复杂类型(如结构)整体的对齐<注意是“整体”>是按照结构体中长度最大的数据成员和#pragma pack指定值之间较小的那个值进行;这样在成员是复杂类型时,可以最小化长度。
也就是说这句话完全没有意义,结构体还是按照最小的short进行对其,所以sizeof是6字节。
修改成#pragma pack(1)才有意思,这样sizeof的值就是4,而不是6.
追问嗯嗯,把第一点忘了...,当成最大的了,谢谢了!!
温馨提示:答案为网友推荐,仅供参考