联合体的大小取决于他所有成员中占用空间最大的一个成员的大小。并且对于复合数据类型,如union,struct, class 的对齐方式为成员中最大成员的对齐方式。
#include <iostream>
using namespace std;
union u //u的大小是其中最大的double类型成员a,所以sizeof(u) = sizeof(double) = 8;
{
double a;
int b;
};
{
double a;
int b;
};
union u1 // u1的大小是char[13] 类型的数组,但由于另一个成员int b ,所以要以4对齐,13以4对齐就是补3位到16;
{
char a[13];
int b;
};
{
char a[13];
int b;
};
union u2 // u2的大小是char[13]类型的数组,不需要补齐,所以长度为13;
{
char a[13];
char b;
};
{
char a[13];
char b;
};
int main()
{
cout << sizeof(u) << endl;
cout << sizeof(u1) << endl;
cout << sizeof(u2) << endl;
{
cout << sizeof(u) << endl;
cout << sizeof(u1) << endl;
cout << sizeof(u2) << endl;
return 0;
}
运行结果:
8
16
13

本文详细解释了C++中联合体(union)的内存分配原理及其对齐方式。通过具体的代码示例展示了不同类型成员如何影响联合体的大小,并特别关注了复合数据类型在不同情况下的对齐规则。
519

被折叠的 条评论
为什么被折叠?



