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

use*_*195 1 c++ struct pragma

我有一个c ++结构:

struct a
{
     char b;
     int c;
     int d[100];
};
Run Code Online (Sandbox Code Playgroud)

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

dav*_*pfx 6

我使用的大多数编译器的故障包装是对象按照自己的大小对齐.结构的默认打包将在char之后和第一个int之前插入填充,以将int放在4字节边界上.显然这是你所看到的行为.

我在Visual Studio上用来实现打包的代码看起来像这样.

#pragma pack(push,1)
struct a {
  char b;
  int c;
  int d[100];
};
#pragma pack(pop)
Run Code Online (Sandbox Code Playgroud)

它删除了填充,在字节1上对齐int.

如果我得到一些时间,我会在几个版本的VS上检查它以确认,但我当前的代码完全像这样.这就是它的完成方式,唯一的问题是为什么它不适合你.

编辑:sizeof(a)如预期的那样是405.b的偏移量为1. VS2012.Gcc是一样的.