為何要記憶體對齊
因為處理器讀寫資料,並不是以位元組為單位,而是以塊(2,4,8,16位元組)為單位進行的。如果不進行對齊,那麼本來只需要一次進行的訪問,可能需要好幾次才能完成,並且還要進行額外的merger或者資料分離。導致效率低下。
更嚴重地,會因為cpu不允許訪問unaligned address,就會報錯,或者開啟偵錯程式或者dump core,比如sun sparc solaris絕對不會容忍你訪問unaligned address,都會以乙個core結束你的程式的執行。所以一般編譯器都會在編譯時做相應的優化以保證程式執行時所有資料都是儲存在'aligned address'上的,這就是記憶體對齊的由來。
在'data alignment: straighten up and fly right'這篇文章中作者還得出乙個結論那就是:"如果訪問的位址是unaligned的,那麼採用大粒度訪問記憶體有可能比小粒度訪問記憶體還要慢"。
記憶體對齊的主要作用是:
2、 效能原因:經過記憶體對齊後,cpu的記憶體訪問速度大大提公升。具體原因稍後解釋。
什麼是記憶體對齊?為什麼要記憶體對齊?
要了解為什麼要記憶體對齊,首先我們要了解什麼是記憶體對齊 typedef struct a typedef struct b 分別對他們求大小,sizeof a sizeof b 我們所得到的結果是不同的,sizeof a 24而sizeof b 16為什麼會產生不一樣的結果呢?這是非常簡單的乙個例...
為什麼要記憶體對齊
當我們聽到 記憶體對齊 這個概念時,從字面意思來看,很容易理解。那就是讓記憶體按一定規則對齊。當然 就會有人說 你這不是廢話 現在我就來說一說為什麼要記憶體對齊以及怎麼個對齊法 如何對齊 記憶體對齊 記憶體對齊 應該是 編譯器的 管轄範圍 編譯器為程式中的每個 資料單元 對於記憶體對齊問題,主要存在...
為什麼要記憶體對齊?
cpu訪問非對齊的記憶體時為何需要多次讀取再拼接?首先簡單說一下何為記憶體對齊。例如,當cpu需要取4個連續的位元組時,若記憶體起始位置的位址可以被4整除,那麼我們稱其對齊訪問。反之,則為未對齊訪問。比如從位址0xf1取4位元組就是非對齊 位址 訪問。簡單的看來,對於乙個資料匯流排寬度為32位的cp...