2014-06-16 70 views
0

我讀過的地方是,在裝配一個32位x86處理器時編程時,儘管事實上可以以低至1字節的單位工作,但是以4字節的倍數來寫入和讀取內存效率更高。這是真的嗎?爲什麼這是真的?導致它如此工作的底層設計是什麼?x86中有效的內存訪問?

+1

如果您需要訪問所有4個字節*,並且地址是4字節對齊*,那麼它可能快4倍,因爲最近的32位CPU上的所有數據路徑都至少爲32位寬。因爲底層內存和高速緩存硬件一次訪問大於1個字節的內存,所以如果您要求使用非對齊的DWORD,則硬件必須讀取2個相鄰的DWORD,然後組合所要求的DWORD與輪班。 (儘管我也聽說最新CPU對未對齊內存訪問的懲罰較低)。 –

+0

這可能是過分簡單化了,但這是一般要領:如果可能,將所有內存訪問對齊到2的最大可行能力,然後使用可用的最大元素大小。不同的CPU和主板在處理不對齊的讀寫操作時可能差異很大;例如很可能高端MB可以檢測到對RAM非對齊訪問的序列,並智能地將它們變成一對兩端的不對齊訪問和一系列對齊訪問。 –

+0

稍微偏離主題問題,如果我想訪問單個字節,數據總線是否會返回4個字節並忽略不需要的三個字節,或者它是否可以單獨訪問單個字節。 –

回答

0

唯一真正的性能損失是從不對齊的位置讀取多字節值。其他一切都是肉汁,特別是在第二個和後續對齊的字節上可能存在緩存命中。