sizeof(struct )大小討論

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

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

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 )大小討論 - feyeye - 學習記錄

 

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

因此sizeof(struct A)=3;

 

struct B {

    int a;           //對其係數4

    char b;       //對其係數1

    short c;     //對其係數2

};//整體對其係數4

 

sizeof(strcut B)值是      

 

如圖

sizeof(struct )大小討論 - feyeye - 學習記錄

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

如圖

sizeof(struct )大小討論 - feyeye - 學習記錄

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

如圖

sizeof(struct )大小討論 - feyeye - 學習記錄

 

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

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

因此 sizeof(struct D)=8

 

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

發佈了8 篇原創文章 · 獲贊 7 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章