天天看點

union和struct類型大小的跨平台讨論

這個問題的教材網上很多,我就不多說了這裡給出一個:點選打開連結

這個問題又最容易引起争執,為什麼呢?與平台或者說與編譯器有關系,先看看下面的代碼:

#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++編譯的結果如下:

union和struct類型大小的跨平台讨論

(2)Windows系統下,Cmake編譯的結果如下:

union和struct類型大小的跨平台讨論
union和struct類型大小的跨平台讨論

具體不是很清楚,可能是Ubuntu做了一些優化,歡迎讨論

union和struct類型大小的跨平台讨論

繼續閱讀