结构的对齐不适用于#pragma pack

时间:2014-03-01 08:43:28

标签: c++ struct pragma

我有一个c ++结构:

struct a
{
     char b;
     int c;
     int d[100];
};

结构的大小应为405字节。 我看到结构的大小是408字节。原因是在整数“c”之后对齐到8个字节。数组“d”应该从结构的第6个字节开始,而不是从第9个字节开始。 我使用#pragma pack(1)但它没有解决问题。 我无法更改结构中字段的顺序。 你知道我怎么能解决这个问题? 谢谢!

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是一样的。