根據現有的各種資料,c/c++中聯合體型別在記憶體中的大小預設以最長的為準,並以長度最長的型別對齊。
按照上述原則
union a;
在記憶體中所佔位元組數應為sizeof(int)*5 並使其以sizeof(double)對齊,在32位或者64位系統平台上,sizeof(a)的值應為24.
不過程式:
#includeusing namespace std;
union a;
int main(void)
的執行結果卻為:
$ g++ tst_sizeof.cpp -o tst_sizeof
$ ./tst_sizeof
sizeof(double) is 8
20不知道大家誰能給解釋一下?
結構體的sizeof值計算方式和聯合體型別相同。記憶體的對齊是為了提高記憶體的訪問效率。如果有結構體和聯合體型別巢狀的情況,應該將被巢狀的型別展開選擇最大的基本型別。
結構體聯合體
在c中,結構也是一種資料型別,可以使用結構變數,因此,象其它型別的變數一樣,在使用結構變數時要先對其定義。定義結構變數的一般格式為 struct 結構名 結構變數 結構名是結構的識別符號不是變數名。型別為第二節中所講述的五種資料型別 整型 浮點型 字元型 指標型和無值型 構成結構的每乙個型別變數稱為...
結構體,聯合體和列舉型別
一.結構體 結構體資料的存放 位段的缺點 不具有跨平台性 二.聯合體 三.列舉型別 若沒有位段 先找預設對齊數和每個數的較小值,再在這些較小值中找出最大的,即為最大對齊數.若上個對齊數開闢的空間還有冗餘可以放下下個數,就把下個數也放在這個空間內,如果不夠放下下個數,就把下個數放到下個空間內.當結構體...
結構體 聯合體 列舉
1 結構體struct 結構體的作用 在網路協議 通訊控制 嵌入式系統的c c 程式設計中,我們要傳送的不是簡單的位元組流 char型陣列 二是多種資料組合起來的乙個整體,其表現形式是乙個結構體。使用struct的注意事項 1 下面看乙個題目 結果 6 12 這裡涉及到結構體的記憶體對齊方式。1 關...