这个问题的教材网上很多,我就不多说了这里给出一个:点击打开链接
这个问题又最容易引起争执,为什么呢?与平台或者说与编译器有关系,先看看下面的代码:
#include <iostream>
using namespace std;
union U1
{
char a[9];
int b;
};
union U2
{
U1 a;
double b;
};
union U3
{
char a[10];
double b;
};
struct S1
{
char a[13];
double c;
};
struct S2
{
S1 a;
U1 b;
};
struct S3
{
char b;
int c;
char d[13];
};
int main()
{
cout << "U1: " << sizeof(U1)<< endl;
cout << "U2: " << sizeof(U2)<< endl;
cout << "U3: " << sizeof(U3)<< endl;
cout << "S1: " << sizeof(S1)<< endl;
cout << "S2: " << sizeof(S2)<< endl;
cout << "S3: " << sizeof(S3)<< endl;
return 0;
}
我用了两种方法测试,测试结果如下:
(1)Ubuntu系统下,G++编译的结果如下:
(2)Windows系统下,Cmake编译的结果如下:
具体不是很清楚,可能是Ubuntu做了一些优化,欢迎讨论