面試常問的記憶體對齊,是什麼意思?

2021-10-25 03:01:55 字數 811 閱讀 7255

關於什麼是記憶體對齊,我們先來看幾個例子:

typedef struct a;

typedef struct b;

分別對他們求大小,sizeof(a),sizeof(b)我們所得到的結果是不同的,

sizeof(a)=24而sizeof(b)=16為什麼會產生不一樣的結果呢?

這是非常簡單的乙個例子,體現了結構體的記憶體對齊規則。

在結構體中,從結構體的首位址開始,假設位址從0開始。

對結構體a來說,a佔4個位元組,佔從0~3的位元組,b是double型別佔8個位元組,佔從8~15的位元組,c佔兩個位元組,從16~17的位元組。

對結構體b來說,a佔4個位元組,從0~3,b佔兩個位元組從4~6;c佔8個位元組從8~15

這就是記憶體對齊,對齊規則是按照成員的宣告順序,依次安排記憶體,其偏移量為成員大小的整數倍,0看做任何成員的整數倍,最後結構體的大小為最大成員的整數倍(所以這裡的a的大小是24,而不是18)。

c語言和c++中空類和空結構體的大小

在c++中規定了空結構體和空類的記憶體所佔大小為1位元組,因為c++中規定,任何不同的物件不能擁有相同的記憶體位址。

而在c語言中,空的結構體在記憶體中所佔大小為0。(gcc中測試為0,其他編譯器不一定)

2.效能原因:資料結構(尤其是棧)應該盡可能地在自然邊界上對齊。原因在於,為了訪問未對齊的記憶體,處理器需要作兩次記憶體訪問;而對齊的記憶體訪問僅需要一次訪問。

GitHub 的 Fork 是什麼意思?

相當於你在原專案的主分支上又建立了乙個分支,你可以在該分支上任意修改,如果想將你的修改合併到原專案中時,可以pull request,這樣原專案的作者就可以將你修改的東西合併到原專案的主分支上去,這樣你就為開源專案貢獻了 開源專案就會在大家共同的努力下不斷壯大和完善 上面說的都是區域性,其實是for...

GitHub的Fork 是什麼意思

現在有這樣一種情形 有乙個叫做joe的程式猿寫了乙個遊戲程式,而你可能要去改進它。並且joe將他的 放在了github倉庫上。下面是你要做的事情 fork並且更新github倉庫的圖表演示 fork他的倉庫 這是github操作,這個操作會複製joe的倉庫 包括檔案,提交歷史,issues,和其餘一...

GitHub的Fork 是什麼意思

有乙個叫做joe的程式猿寫了乙個遊戲程式,而你可能要去改進它。並且joe將他的 放在了github倉庫上。下面是你要做的事情 fork並且更新github倉庫的圖表演示 fork他的倉庫 這是github操作,這個操作會複製joe的倉庫 包括檔案,提交歷史,issues,和其餘一些東西 複製後的倉庫...