1. 程式人生 > >為何要記憶體對齊

為何要記憶體對齊

 為何要記憶體對齊

http://www.ibm.com/developerworks/library/pa-dalign/

因為處理器讀寫資料,並不是以位元組為單位,而是以塊(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的,那麼採用大粒度訪問記憶體有可能比小粒度訪問記憶體還要慢"。

 

http://www.cnblogs.com/kevinLee-xjtu/archive/2011/12/12/2299090.html