結構體的儲存方式及其大小計算

2021-07-04 01:24:10 字數 733 閱讀 6173

關於結構體,在計算時候首先想到的就是對其,但是怎樣去對其一直是比較頭疼的事情,下面將個人理解分享一下:

計算結構體的大小時候,首先要把握的就是第乙個資料成員一定是從偏移為0的位置開始儲存,其他的資料成員要從自己大小的整數倍開始儲存;其次就是補齊工作,結構體的總大小一定是內部資料成員的整數倍,不足的地方就需要補齊。如果結構體中成員變數有其他結構體型別,則該結構體資料成員中所有成員變數的大小都按其中最大的來計算。下面將舉例詳細介紹這些規則。

例如計算 struct a;

第乙個資料成員為a,大小為4,儲存位置從0~3;第二b大小為1,其整數倍可以是任何數,所以可以從4開始,儲存位置為4;第三個c大小為8,儲存位置必須從8開始在,則儲存位置為8~15;最後一步是補齊工作,整個結構體大小必須是8的整數倍,故最後大小為4+4+8=16;aa

aabc

cccc

cccstruct b;

第乙個資料成員為a,大小為4,儲存位置為0~3,;第二個為b,大小為1*2,儲存的起始位置為1的整數倍4~5;第三個為short,大小為2,儲存位置為6~7;故整個結構體大小為8。

struct c;

第乙個資料成員為a,大小為4,儲存位置為0~3,;第二個為b,大小為1*2,儲存的起始位置為1的整數倍4~5;第三個為short,大小為2,儲存位置為6~7;結構體a的變數中包含乙個int(4)、乙個char(1)、乙個double(8),其中最大的為double(8),因此d的大小為3*8=24,故整個結構體大小為8+24=32。

結構體大小計算

c語言 結構體大小計算 個人標籤啥東東封尾機 參考 一 結構體變數中成員的偏移量必須是成員大小的整數倍 0被認為是任何數的整數倍 eg typedef struct stu4 stu4 typedef struct stu5 stu4 這兩個結構體大小都為8 已驗證 二 結構體大小必須是所有成員大小...

結構體大小計算

結構體中的成員可以是不同的資料型別,成員按照定義時的順序依次儲存在連續的記憶體空間。和陣列不一樣的是,結構體的大小不是所有成員大小簡單的相加,需要考慮到系統在儲存結構體變數時的位址對齊問題。看下面這樣的乙個結構體 struct stu1 先介紹乙個相關的概念 偏移量。偏移量指的是結構體變數中成員的位...

結構體大小計算

結構體成員偏移量必須是成員大小的整數倍 結構體的大小必須是成員大小的整數倍 陣列,結構體除外 雖然浪費空間,但按照計算機的訪問規則,這種對齊方式,提高了效率 struct s1 int b 4float c 4double d 8 c pragma pack 4 指定向4對齊,而不是8 struct...