struct大小計算

sizeof(struct )大小討論
針對字節對齊,環境使用的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{
char a; //字長1對其係數1
char b; //字長1對其係數1
char c; //字長1對其係數1
};//整體對其係數爲1
sizeof(struct A)值是

看下圖
這裏寫圖片描述
綠色爲被填充的內存,黃色爲空
因此sizeof(struct A)=3;

struct B {
int a; //對其係數4
char b; //對其係數1
short c; //對其係數2
};//整體對其係數4

sizeof(strcut B)值是

如圖
這裏寫圖片描述
short c對其係數2必須和偶地址對其,int a同理也與能4的倍數地址對其。
粉色內存被結構佔用
因此
sizeof(strcut B)=8

struct C {
char b; //對其係數1
int a; //對其係數4
short c; //對其係數2
};//整體對其係數4

sizeof(struct C)的值是
如圖
這裏寫圖片描述
int a 從4的倍數地址開始,所以開始地址是4,因爲結構整體對其係數爲4,因此short c後的兩個內存被佔用,使大小爲4的倍數。
sizeof(struct C)=12

#progma pack (2)
struct D {
char b; //對其係數min(長度=1,n=2)=1
int a; //對其係數min(長度=4,n=2)=2
short c; //對其係數min(長度=2,n=2)=2
};//整體對其係數2
sizeof(struct D)值是
如圖
這裏寫圖片描述

#progma pack (2) 對int a的放置產生影響,
#progma pack (n) 只能取1、2、4
因此 sizeof(struct D)=8

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章