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...