sizeof struct 大小討論

2021-07-13 07:49:58 字數 1286 閱讀 4211

struct 結構大小和順序、#progma pack引數有關係

針對位元組對齊,環境使用的

gcc version 3.2.2

編譯器(32位

x86平台)為例。

char 長度為1個位元組,short 長度為2個位元組,int 長度為4個位元組。

struct 子項在記憶體中的按順序排列,在沒有#progma pack(n)引數的情況,

各個子項的對齊係數為自己長度。

在有#progma pack(n)引數的情況,各子項的對齊係數為min(自己長度,n);

struct 整體的對其係數為子項對齊係數最大值

看下面的例題:

struct a

;//整體對其係數為1

sizeof(struct a)值是

看下圖

綠色為被填充的記憶體,黃色為空

因此sizeof(struct a)=3;

struct b ;//整體對其係數4

sizeof(strcut b)

值是如圖

short c對其係數2必須和偶位址對其,int a同理也與能4的倍數字址對其。

粉色記憶體被結構占用

因此sizeof(strcut b)=8

struct c ;//整體對其係數4

sizeof(struct c)

的值是如圖

int a 從4的倍數字址開始,所以開始位址是4,因為結構整體對其係數為4,因此short c後的兩個記憶體被占用,使大小為4的倍數。

sizeof(struct c)=12

#progma pack (2)

struct d ;//整體對其係數2

sizeof(struct d)

值是如圖

#progma pack (2)  對int a的放置產生影響,

#progma pack (n)  只能取1、2、4 因此

sizeof(struct d)=8

至此stuct大小討論,大致明了

sizeof struct 大小討論

2009 11 08 14 05 51 分類 c語言雜記 舉報 字型大小 訂閱 struct 結構大小和順序 progma pack引數有關係 針對位元組對齊,環境使用的gcc version 3.2.2編譯器 32位x86平台 為例。char 長度為1個位元組,short 長度為2個位元組,int...

sizeof(struct)對齊方式

結構體是一種復合資料型別,通常編譯器會自動的進行其成員變數的對齊,已提高資料訪問的效率。在預設情況下,編譯器為結構體的成員按照自然對齊 natural alignment 條方式分配儲存空間,各個成員按照其宣告順序在儲存器中順序儲存。自然對齊是指按照結構體中成員size最大的對齊,在cl編譯器下可以...

遇到sizeof struct 怎麼計算?

1 sizeof應用在結構上的情況 請看下面的結構 struct mystruct 對結構mystruct採用sizeof會出現什麼結果呢?sizeof mystruct 為多少呢?也許你會這樣求 sizeof mystruct sizeof double sizeof char sizeof in...