结构体#pragma pack()问题 #pragma pack(8) struct foo { char c1; short s; char c2; }; #pragma pack()

这个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.

追问

嗯嗯,把第一点忘了...,当成最大的了,谢谢了!!

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网