我知道 Union 成员共享内存空间,所以我希望下面的代码输出 9 和 9。但是,我得到 12 和 9。为什么?
union Sample_union {
int x;
char array [9];
};
int main(){
Sample_union sample;
cout<<sizeof(sample)<<endl;
char test [9];
cout<<sizeof(test)<<endl;
}
我也在不同的编译器中测试了以下代码。
最佳答案
这是因为填充。
如果 union 包含一个 int
,编译器在这种情况下希望确保 union 数组中的所有 int
都将对齐到 4 字节边界。
char
没有对齐要求,因此填充 9 个字符的数组没有意义。
例如对于 g++,如果您添加一个 double
成员, union 的大小变为 16(因为 double
对齐是 8 个字节)。
关于c++ - C++ 结构中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27623704/