C++ 结构奇异偏移
但应输出以下内容:C++ 结构奇异偏移,c++,struct,bmp,C++,Struct,Bmp,但应输出以下内容: 2 4 16 2 90 =?= 0 我不知道为什么BMP_头中的文件大小有4个偏移量,如果2个字符(BMP_头中的MN)有2个字节大小 我正在使用MinGW许多abi指定结构应该根据其最大成员对齐。在您的例子中,BMP\u Header的最大成员大小为4个字节,因此它与4个字节对齐。这意味着需要添加一些填充(因为您只有14个字节的值表示)。在MN和filesize成员之间添加填充,以便所有成员都与4字节边界对齐 请注意,这完全依赖于目标机,如果编译跨平台,则不能依赖结果。
2 4
16 2
90 =?= 0
我不知道为什么BMP_头中的文件大小有4个偏移量,如果2个字符(BMP_头中的MN)有2个字节大小
我正在使用MinGW许多abi指定结构应该根据其最大成员对齐。在您的例子中,
BMP\u Header
的最大成员大小为4个字节,因此它与4个字节对齐。这意味着需要添加一些填充(因为您只有14个字节的值表示)。在MN
和filesize
成员之间添加填充,以便所有成员都与4字节边界对齐
<>请注意,这完全依赖于目标机,如果编译跨平台,则不能依赖结果。 < P>这是因为C和C++编译器通过在其中添加一个或多个字节来构造。这样做是为了提高数据访问的效率 例如,在第一种情况下,编译器在两字节
MN
成员和文件大小
之间添加了两个字节,这是一个int
,可能是因为在目标体系结构中,当地址可被4整除时,访问int
会更快
注意:您可以使用而不是执行指针操作来计算
结构的相应元素的偏移量
,感谢您的帮助和有用的注意
2 4
16 2
90 =?= 0
2 2
14 2
90 =?= 90