我有一个c ++结构:
struct a
{
char b;
int c;
int d[100];
};
结构的大小应为405字节。
我看到结构的大小是408字节。原因是在整数“c”之后对齐到8个字节。数组“d”应该从结构的第6个字节开始,而不是从第9个字节开始。
我使用#pragma pack(1)
但它没有解决问题。
我无法更改结构中字段的顺序。
你知道我怎么能解决这个问题?
谢谢!
答案 0 :(得分:6)
我使用的大多数编译器的错误包装是对象按照自己的大小对齐。结构的默认打包将在char之后和第一个int之前插入填充,以将int放在4字节边界上。显然这是你所看到的行为。
我在Visual Studio上用来实现打包的代码看起来像这样。
#pragma pack(push,1)
struct a {
char b;
int c;
int d[100];
};
#pragma pack(pop)
删除填充,在字节1上对齐int。
如果我有时间,我会在VS的几个版本上检查它以确认,但我当前的代码就像这样。这就是它的完成方式,所以唯一的问题就是为什么它不适合你。
编辑:sizeof(a)如预期的那样是405。 b的偏移量为1. VS2012。 Gcc是一样的。