这个问题的教材网上很多,我就不多说了这里给出一个:点击打开链接
这个问题又最容易引起争执,为什么呢?与平台或者说与编译器有关系,先看看下面的代码:
#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做了一些优化,欢迎讨论
时间: 2024-12-15 13:49:47