2014-05-23 37 views
2

The memory subsystem on a modern processor is restricted to accessing memory at the granularity and alignment of it's word size從內存中讀取「char」比讀取「word」更快嗎?

所以,我可以假設從內存中讀取一個字符應該像讀一個字(4字節)一樣快?

如果答案是YES,爲什麼我們甚至在編碼時使用char變量而不是word變量(除了明顯的類型檢查必要性)。

+1

雖然我已經很長時間了,但是我不得不擔心這種優化級別......但它仍然是一個有趣的問題+1 – hammus

+1

處理器通常會一次從內存中讀取整個緩存行。如果你真的需要存儲一個字節的話,它會浪費大量的內存來分配一個完整的緩存行。它也會(經常)導致大幅減速,因爲它會將有效緩存大小減少爲每行只有一個字符。打包數據使緩存更有效。 –

+0

但是,無論我是否會在現金欄中輸入字符或單詞,掃描都必須以任何方式進行,不是嗎? – Kam

回答

0

爲什麼我們使用char變量?避免浪費記憶。如果您需要4個變量,則可以將4個char s合併爲一個單詞,但是如果您將它們聲明爲int,則需要4個單詞。如果他們只需要保持較低的數字,那麼所有額外的內存都是不必要的。

0

我可以立即想到的一個原因是我們只需要一個ASCII字符的字節。

const WORD* str = W"Hello World?"; 
       //^Some theoretical WORD-charactered string 

呵呵。

所以,因爲每個字符只是一個字節,處理器只需要在獲取4個字符時進行一次獲取。