当前位置: 技术问答>linux和unix
struct 的member对齐问题
来源: 互联网 发布时间:2016-06-19
本文导语: 在32bit linux下面。 下面的代码 #pragma pack(push,4) typedef struct XX { char x; long long y; }XXX; #pragma pack(pop) main() { printf("%dn",sizeof(XXX)); } 输出为 12 但是#pragma ...
在32bit linux下面。
下面的代码
#pragma pack(push,4)
typedef struct XX
{
char x;
long long y;
}XXX;
#pragma pack(pop)
main()
{
printf("%dn",sizeof(XXX));
}
输出为 12
但是#pragma pack(push,8 ) 的时候输出仍然为12
而且我的g++参数也加上了 -fpack-struct=8
不知道为什么看起来#pragma pack(push,8 )没有起作用
下面的代码
#pragma pack(push,4)
typedef struct XX
{
char x;
long long y;
}XXX;
#pragma pack(pop)
main()
{
printf("%dn",sizeof(XXX));
}
输出为 12
但是#pragma pack(push,8 ) 的时候输出仍然为12
而且我的g++参数也加上了 -fpack-struct=8
不知道为什么看起来#pragma pack(push,8 )没有起作用
|
pack(value)中的value的值不是可以任意大的。在32位机器上,最大的值就是4了。你写得再大,也是按照4来对待的。如果是64位机器,有可能是8。
|
应该是linux下32位机器,你设置为8字节对齐,它也只选择4字节分选项里的最下值来对齐吧。