面試題 聯合體的大小

2021-08-15 03:24:08 字數 690 閱讀 7182

例1

#include

using

namespace

std;

//#pragma pack(2) pragma pack(x)可以改變編譯器的對齊方式

union u1

;union u2

;union u3

;int main()

不僅僅union,對於別的復合資料型別,如union、struct、class的對齊方式為成員中最大的成員對齊方式。

1.對於u1來說,大小就是最大的double型別成員a

2.對於u2來說,最大的空間是char[13]型別的陣列。由於int資料b的存在,u2的對齊方式變成4。

3.對於u3來說,最大的空間是char[13]型別的陣列。

例2#include

using

namespace

std;

#pragma pack(2)

union u

;int main()

對齊是可以更改的,使用#pragma pack(x)可以改變編譯器的對其方式。

c++固有型別的對齊取編譯器對齊方式與自身大小中較小的乙個。

例2中手動更改了對齊方式為2,int對齊方式為4,自身對齊為2,去最小者,

所以 sizeof(u)= 10。

使用sizeof計算聯合體的大小

include using namespace std union u union u2 union u3 int main int main int main cout 解析 上述 中用 pragma pack將對齊設定為1,由於結構體test中的成員s1,s2和i的自身對齊分別為2 2和4,都小...

聯合體 位域結構體 聯合體的妙用

在c語言中,變數的定義是分配儲存空間的過程。一般的,每個變數都具有其獨有的儲存空間,那麼可不可以在同乙個記憶體空間中儲存不同的資料型別 不是同事儲存 呢?答案是可以的,使用聯合體就可以達到這樣的目的。聯合體也叫共用體,在c語言中定義聯合體的關鍵字是union。定義乙個聯合型別的一般形式為 union...

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

根據現有的各種資料,c c 中聯合體型別在記憶體中的大小預設以最長的為準,並以長度最長的型別對齊。按照上述原則 union a 在記憶體中所佔位元組數應為sizeof int 5 並使其以sizeof double 對齊,在32位或者64位系統平台上,sizeof a 的值應為24.不過程式 inc...