struct大小計算

2021-07-14 10:18:20 字數 1226 閱讀 9509

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