結構體大小的計算方法

2021-08-21 07:55:47 字數 1286 閱讀 6722

結構體在春村過程中會有「記憶體對齊」的要求。在計算結構體大小的時候,謹記兩條規則:

1、上面定義的常量或者變數型別占用的記憶體大小是下面定義的倍數;

2、計算出的最終值能否整除當前結構體中最大的資料型別。

計算下列結構體的大小:

1、

struct a

;//8

int 型別的常量占用4個位元組,兩個int型的占用8個位元組。2、

struct b

;//8

char型別占用乙個位元組,int型別占用4個位元組,常規思路會認為占用5

個位元組,然而並不是。這裡用到第一條規則:上面定義的常量或者變數型別占用的記憶體大小是下面定義的倍數。原因如下:

由於要保證儲存過程中記憶體對齊,系統將會將三個位元組的記憶體捨棄,而選擇從104這個4的倍數的記憶體下標開始儲存b.

3、

struct c

;//5+3,最終的值能整除單個最大資料型別

如果先定義的是整型型別,其占用4 個位元組;再定義char型別

其占用1個位元組。按照常規思維模式會認為此結構體一共占用5個位元組,但事實上它占用8個位元組。這時候由於「記憶體對齊」應考慮第二條規則:計算出的最終值能否整除當前結構體中最大的資料型別。

4、

struct d

;struct e

;//12

char a;//1+1short b;//2int c;//4};//8

char型別占用1個位元組,但是下面的short型別占用兩個位元組,為了保證記憶體對齊,常量a的下乙個單元記憶體會被空出;而char型別和short型別以及空出的單元記憶體一共為4位元組,剛好是下面int型別所需記憶體大小的倍數,這樣結構體d所占用的記憶體大小就是8位元組。

5、

struct m

;//24

與結構體d的計算方法相同,需要注意的是,short型別占用2個位元組是char型別的兩倍,但是char與short型別共佔3個位元組不是下乙個double型別的倍數,這個時候系統就會將下面的五個單元記憶體空出,再儲存double型別常量。

6、

struct ee

;struct e

;//12

struct f

;//16

結構體大小的計算方法

結構體大小計算方法 例項驗證 gcc更改對齊選項 char 1個位元組 char 即指標變數 4個位元組 32位的定址空間是2 32,即32個bit,也就是4個位元組 shortint 2個位元組 int 4個位元組 unsigned int 4個位元組 float 4個位元組 double 8個位...

結構體大小計算方法

原文 結構體中的成員可以是不同的資料型別,成員按照定義時的順序依次儲存在連續的記憶體空間。和陣列不一樣的是,結構體的大小不是所有成員大小簡單的相加,需要考慮到系統在儲存結構體變數時的位址對齊問題。看下面這樣的乙個結構體 struct stu1 實際上,由於儲存變數時位址對齊的要求,編譯器在編譯程式時...

結構體字長計算方法

計算方法 運算子sizeof可以計算出給定型別的大小,對於32位系統來說,sizeof char 1 sizeof int 4。基本資料型別的大小很好計算,我們來看一下如何計算構造資料型別的大小。c語言中的構造資料型別有三種 陣列 結構體和共用體。陣列是相同型別的元素的集合,只要會計算單個元素的大小...