關於記憶體對齊

2022-04-10 03:17:18 字數 484 閱讀 6314

class a

class b

;class c

;cout<

大家一定會奇怪為什麼最後面的那個會是8位元組!

這和變數在記憶體中的儲存形式有關(罪魁禍首是編譯器),大家都知道我們所寫的**,在編譯後都會變成彙編**(也會進一步成為機器**),

彙編吧資料設計成段棧的儲存形式,為了提高訪問效率,它要求每一次移動棧頂指標的步長都要相同(以空間換換時間)!

也就是說即使乙個變數沒有佔那麼多位元組也要把它後面補上一些空位元組來使各變數在記憶體上對齊!而且按照佔位元組最多的那個變數來對齊!

舉個例子吧!

struct s

在記憶體上,儲存這四個變數是按出現的順序來的!首先最長的是b佔8個位元組,前兩個一共佔了5個位元組,所以可以把i和j「連線成一塊",然後在後面補齊3個空位元組,然後寫b8個位元組,最後是a因為後面已經沒有變數了所以他自己在後面補齊4個空位元組!ok

!所以結果是24個位元組!

**:記憶體對齊

關於記憶體對齊

資料傳送到網路板的資料報大小根本不是實際控制數 據包的大小 這時我才想起乙個人,stanley b.lippman,他寫的那 一本書 inside object modale 曾經提過這樣的事 情,編譯器為了提高cpu的效率,會對struct 的結構進行優化,利用sizeof 可以得出不同的計算機上...

關於記憶體對齊

早上看了乙個貼的面試題,struct st int i short s char c sizeof struct st 是多少?int 4,short 2,char 1,但是sizeof st 是8。這個就是記憶體對齊 再來看個例子 struct strt1 strt1 s1 假設s1.c1位址為0...

關於記憶體對齊

資料傳送到網路板的資料報大小根本不是實際控制資料報的大小 這時我才想起乙個人,stanley b.lippman,他寫的那一本書 inside object modale 曾經提過這樣的事情,編譯器為了提高cpu的效率,會對struct 的結構進行優化,利用sizeof 可以得出不同的計算機上對 s...