1. 程式人生 > >聯合體結構體型別大小判斷

聯合體結構體型別大小判斷

根據現有的各種資料,C/C++中聯合體型別在記憶體中的大小預設以最長的為準,並以長度最長的型別對齊。

按照上述原則
union A{
    int a[5];
    char b;
    double c;
};

在記憶體中所佔位元組數應為sizeof(int)*5 並使其以sizeof(double)對齊,在32位或者64位系統平臺上,sizeof(A)的值應為24.

不過程式:

#include<iostream>
using namespace std;

union A{
    int a[5];
    char b;
    double c;
};

int main(void){
    cout << "sizeof(double) is " << sizeof(double) << endl;
    cout << sizeof(A) << endl;
    return 0;
}

的執行結果卻為:
$ g++ tst_sizeof.cpp  -o tst_sizeof
$ ./tst_sizeof
sizeof(double) is 8
20
不知道大家誰能給解釋一下?

結構體的sizeof值計算方式和聯合體型別相同。記憶體的對齊是為了提高記憶體的訪問效率。如果有結構體和聯合體型別巢狀的情況,應該將被巢狀的型別展開選擇最大的基本型別。