C++ C+中的奇怪行为+;结构

C++ C+中的奇怪行为+;结构,c++,memory-management,sizeof,unions,C++,Memory Management,Sizeof,Unions,我知道联盟成员共享内存空间,所以我希望下面的代码输出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; } un

我知道联盟成员共享内存空间,所以我希望下面的代码输出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示例\u union{
int x;
字符数组[9];
};
int main(){
样本\联合样本;

cout这是因为填充

如果联合体包含一个
int
,则本例中的编译器希望确保在联合体数组中,所有
int
s将与4字节边界对齐

另一方面,
char
s没有对齐要求,因此填充9个字符的数组没有意义


例如,使用g++时,如果添加一个
double
成员,则联合的大小将变为16(因为
double
对齐是8字节)。

因为可以填充
struct
class
union
中的数据成员。