C C 中記憶體對齊問題

2021-07-04 09:11:49 字數 521 閱讀 1991

我們通過幾個例子來全面搞懂c/c++中的記憶體對齊問題。來看看下面的結構體大小分別是多大?(假設均在32位機器上)

struct a ;
這個相信大家都知道,由於變數都是char型別,對齊值為1,所以結構體大小為3。

struct b ;
對齊值為4,結構體大小為:4+4=8。(第乙個4為int,第二個4裡面包含乙個1位元組的char型變數b和乙個2位元組的short變數c,還有乙個位元組是空餘的)

struct c ;
對齊值為4,結構體大小為:4+4+4=12。(第乙個為char,空餘3個位元組,第二個為int,第三個為short,空餘2個位元組)

#pragma pack(2)

struct d ;

對齊值為2。(這是因為使用了#pragma pack(2)指定了對齊值)結構體大小為:2+4+2=8。(第乙個是char,空餘1個位元組,第二個為int,第三個為short)

c c 中的記憶體對齊

32位linux 下 class a char c1 sizeof a 1 而非 4,這點有點出乎意料!按照對齊要求,在32位環境中預設的對齊是按照4位元組來的,但是這裡似乎沒有表現出4位元組的對齊要求!class b這樣定義 class b char c1 short s1 這個時候sizeof ...

C C 記憶體對齊

一 什麼是位元組對齊,為什麼要對齊?現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特 定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。對齊的...

C C 記憶體對齊

一 什麼是位元組對齊,為什麼要對齊?現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特 定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。對齊的...