記憶體對齊原則

2021-09-25 20:29:28 字數 690 閱讀 1533

假設有乙個結構體如下

struct test

;

大小是1+2+4=7嗎?不對,這個就是記憶體對齊導致的

1.平台移植原因,不是所有的硬體都能訪問任意位址上的資料

2.提高效率,犧牲空間,換取時間

拼矩形法

首先各自資料占用的空間如下,編譯器會尋找占用空間最大的型別為基準

編譯器優化後資料占用空間如下

編譯器補齊未利用的空間

最後結構體實際占用空間大小為8位元組,即為總共格仔數

注意結構體宣告時,相鄰的變數才會進行優化處理,若b、c宣告時順序調換則結果不同

struct test

;

則最終結果為

結構體大小為12

記憶體對齊原則

一 記憶體對齊的原因 1 平台移植原因 不是所有的硬體平台都能任意訪問任意位址上的資料,有些硬體平台只能在某些特定位址處讀取特定的資料,否則會丟擲硬體異常 2 效能原因 資料結構 尤其是棧 應盡可能的在自然邊界對齊。原因在於,訪問未對齊的記憶體,處理器需要進行兩次訪問,而訪問對齊的記憶體,處理器只需...

記憶體對齊原則

首先由乙個程式引入話題 1 環境 vc6 windows sp22 程式13 include 45 using namespace std 6 7struct st1 8 13 14struct st2 15 20 21int main 22 27 程式的輸出結果為 sizeof st1 is 12...

記憶體對齊原則

includeusing namespace std struct a struct b int main cout 以上結構體變數數量型別相同。但是sizeof卻不同,sizeof a is 12 sizeof b is 8 那麼問題來了,為什麼兩個一樣的結構體,但是sizeof大小卻不同?答案就...