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;//整體對其係數為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大小討論,大致明了
struct 大小計算
結構體是一種復合資料型別,通常編譯器會自動的進行其成員變數的對齊,已提高資料訪問的效率。在預設情況下,編譯器為結構體的成員按照自然對齊 natural alignment 條方式分配儲存空間,各個成員按照其宣告順序在儲存器中順序儲存。自然對齊是指按照結構體中成員size最大的對齊,在cl編譯器下可以...
struct結構體大小計算
c c 中結構體大小的計算 結構體大小與屬性型別和它的儲存結構有關,總結來說便是 結構體大小總是其中屬性最大型別的整數倍大小 以所佔位元組最大的屬性為基本單位進行屬性劃分 例 struct mystruct 該結構體大小為44 分析 char a 20 20位元組 int x 4位元組 float ...
union和struct的大小計算
宣告 整理自網路。規則 1,對於union,對齊的大小是最大的基本元素的對齊大小 物件的大小必須是該基本元素大小的整數倍 2,對於struct,對齊的大小也是最大的基本元素的對齊大小,物件的大小需要考慮元素的對齊,並且需要是最大基本元素的整數倍 同時有 pragma pack修飾的情況,關於stru...