結構體大小及記憶體對齊

2021-09-12 15:38:08 字數 825 閱讀 8859

結構體大小

在計算結構體大小時,有幾點需要注意:

1.char可存放在任意位址,short存放在能被2整除的位址,int存放在能被4整除的位址…即資料型別存放的位址要能被其資料型別所佔位元組數整除。(可先將每個成員的位元組數寫出,然後從第二個成員開始,將前面成員的總位元組數補齊成當前位元組數的倍數。)

2.結構體的總大小,一定要能整除單個成員最大型別的大小。

struct a

;//所佔位元組數為8

struct b

;//所佔位元組數為24

struct c

d;//8

};//所佔位元組數為12

(總大小一定要能整除單個成員最大型別的大小,單個成員最大型別為int/float,位元組數為4,故結構體總大小為12而不是16)

struct x

;//沒有定義變數,不占用記憶體

};struct d

;};//12

記憶體對齊:各種資料存放的位址要能夠整除該資料本身的位元組數

在上方的儲存方式中,aa[1]的存放首位址無法整除4,此時需要記憶體對齊,即下方的儲存方式,char型只佔乙個位元組,後面空出三個不使用的空位,將後面的資料儲存在前八個位元組後,防止在不同的平台中資料發生錯亂。

在編寫程式時,我們可以

char a;//1+3

//char tmp[3];//定義變數將未使用的空間佔滿,保留不用

int b;//4

};

結構體的大小 記憶體對齊

includeusing namespace std struct t1 結果為8的倍數,因為最大成員型別double佔8位元組 16 struct t2 結果為2的倍數,因為最大成員型別short佔2位元組 4 struct t3 結果為8的倍數,因為最大成員型別double佔8位元組 16 st...

結構體的大小與記憶體對齊

結構體的大小不是結構體元素單純相加就行的,因為我們現在主流的計算機使用的都是32bit 字長的cpu,對這型別的cpu取4個 位元組的數要比取乙個位元組要高效,也更方便。所以在結構體中每個成員的首位址都是4的整數倍的話,取資料元素時就會相對更高效,這就是記憶體對齊的由來。每個特定平台上的 編譯器都有...

結構體對齊(記憶體對齊

有的時候,在腦海中停頓了很久的 顯而易見 的東西,其實根本上就是錯誤的。就拿下面的問題來看 structt 使用sizeof t 將得到什麼樣的答案呢?要是以前,想都不用想,在32位機中,int是4個位元組,char是1個位元組,所以t一共是5個位元組。實踐出真知,在vc6中測試了下,答案確實8個位...