考虑以下程序:
#include <iostream>
struct __attribute__((__packed__)) mystruct_A
{
char a;
int b;
char c;
}x;
int main()
{
std::cout<<sizeof(x)<<'\n';
}
来自 this我的理解如下:
- 结构填充抑制结构填充,填充时使用 对齐最重要,当空间最重要时使用包装。
- 结构打包,另一方面阻止编译器做 填充
我在 32 位环境中使用 Windows 7 操作系统。链接问题的第一个答案说上面的代码将在 32 位架构上生成大小为 6 的结构。
但是当我使用 g++ 4.8.1 编译它时,它给出了 9 作为输出。那么,结构包装不是完全发生在这里吗? 为什么输出中有额外的 3 个字节? sizeof char 始终为 1。在我的编译器上,sizeof int 为 4。所以,结构体打包时,上面结构体的sizeof应该是1+4+1=6。
我在 here 上试过了.它给了我预期的输出 6。
有处理器的作用还是只依赖于编译器?
最佳答案
打包的属性是 broken on mingw32 compilers .另一种选择是使用 pragma pack :
#pragma pack(1)
struct mystruct_A {
char a;
int b;
char c;
} x;
关于c++ - 为什么 g++ 不在这里执行结构打包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32808572/