我有一个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)
但没有解决问题.我无法更改结构中字段的顺序.你知道我怎么能解决这个问题?谢谢!
我使用的大多数编译器的故障包装是对象按照自己的大小对齐.结构的默认打包将在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是一样的.
归档时间: |
|
查看次数: |
5250 次 |
最近记录: |