C++ C+中的奇怪行为+;结构
我知道联盟成员共享内存空间,所以我希望下面的代码输出9和9。然而,我得到12分和9分。为什么?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
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
中的数据成员。