Des*_*tor 2 c++ structure sizeof padding memory-alignment
考虑以下程序:
#include <iostream>
struct __attribute__((__packed__)) mystruct_A
{
char a;
int b;
char c;
}x;
int main()
{
std::cout<<sizeof(x)<<'\n';
}
Run Code Online (Sandbox Code Playgroud)
从这个我明白了以下几点:
我在32位环境中,正在使用Windows 7 OS。链接问题的第一个答案说,以上代码将在32位体系结构上生成6号大小的结构。
但是,当我使用g ++ 4.8.1对其进行编译时,它的输出为9。那么,结构打包在这里不会完全发生吗?为什么输出中要多出3个字节?sizeof char始终为1。在我的编译器中,sizeof int为4。因此,压缩结构时,以上结构的sizeof应该为1 + 4 + 1 = 6。
处理器有任何作用还是仅取决于编译器?
小智 5
在mingw32编译器上,打包的属性已损坏。另一种选择是使用 pragma pack:
#pragma pack(1)
struct mystruct_A {
char a;
int b;
char c;
} x;
Run Code Online (Sandbox Code Playgroud)