sizeof(struct )大小討論

原地址:http://blog.163.com/feyeye@126/blog/static/4351010920091082551515/

 

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

針對字節對齊,環境使用的gccversion 3.2.2編譯器(32x86平臺)爲例。

 

char 長度爲1個字節,short 長度爲2個字節,int 長度爲4個字節。

 

struct 子項在內存中的按順序排列,在沒有#progma pack(n)參數的情況,各個子項的對齊係數爲自己長度。

在有#progmapack(n)參數的情況,各子項的對齊係數爲min(自己長度,n);

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

看下面的例題:

struct A{

char a; //字長1對其係數1

char b; //字長1對其係數1

char c; //字長1對其係數1

}//整體對其係數爲1

sizeof(struct A)值是        

看下圖

wKioL1UZB6yCwnjdAADLqcAg8Go250.jpg

 

綠色爲被填充的內存,***爲空

因此sizeof(structA)=3;

 

struct B {

   int a;           //對其係數4

   char b;       //對其係數1

   short c;     //對其係數2

};//整體對其係數4

 

sizeof(strcut B)值是     

如圖

wKiom1UZBr_hCOumAADKkg4sfeg035.jpg

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)的值是    

如圖

wKioL1UZCAPxNJfOAADNcBzGU08636.jpg

 

 

int a 4的倍數地址開始,所以開始地址是4,因爲結構整體對其係數爲4,因此short c後的兩個內存被佔用,使大小爲4的倍數。

sizeof(struct C)=12

 

#progma pack (2)

struct D {

   char b;    //對其係數min(長度=1n=2=1

   int a;       //對其係數min(長度=4n=2=2

   short c;   //對其係數min(長度=2n=2=2

};//整體對其係數2

sizeof(struct D)值是    

如圖

 wKiom1UZBtGQj2puAADHVx6W8_Q877.jpg


 

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

#progma pack (n)  只能取124

因此sizeof(struct D)=8

 

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

 


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