考虑以下计划:
#include <iostream>
struct __attribute__((__packed__)) mystruct_A
{
char a;
int b;
char c;
}x;
int main()
{
std::cout<<sizeof(x)<<'\n';
}
来自this我理解了以下内容:
我在32位环境&amp;使用Windows 7操作系统。链接问题的第一个答案是,上面的代码将在32位架构上产生大小为6的结构。
但是当我使用g ++ 4.8.1编译它时,它给出了9作为输出。那么,结构包装在这里完全没有发生吗? 为什么输出中有额外的3个字节? sizeof char总是1.在我的编译器中,sizeof int是4。因此,当结构打包时,上面结构的sizeof应该是1 + 4 + 1 = 6。
我在here上尝试过。它给出了我预期的输出6.
处理器是否有任何作用,或者仅取决于编译器?
答案 0 :(得分:4)
属性打包为broken on mingw32 compilers。另一种选择是使用 pragma pack:
#pragma pack(1)
struct mystruct_A {
char a;
int b;
char c;
} x;
答案 1 :(得分:0)
这里的解决方案对我有用:https://wintermade.it/blog/posts/__attribute__packed-on-windows-is-ignored-with-mingw.html,它将-mno-ms-bitfields
添加到编译器标志中。