聯合體結構體型別大小判斷
阿新 • • 發佈:2019-02-09
根據現有的各種資料,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值計算方式和聯合體型別相同。記憶體的對齊是為了提高記憶體的訪問效率。如果有結構體和聯合體型別巢狀的情況,應該將被巢狀的型別展開選擇最大的基本型別。