當我們使用malloc和訪問內存時,爲這個地址空間提供的物理頁面具有什麼樣的頁面屬性,它們是可緩存的還是不可緩存的頁面?是否將malloc內存頁面屬性設置爲可緩存或不可緩存?
0
A
回答
0
普通內存 - 無論是用戶空間還是內核 - 幾乎總是被標記爲可緩存的。否則,使用該內存將會導致巨大的性能下降。
一般而言,您希望內存被標記爲不可緩存的唯一時間是內存實際上是外部設備(即內存芯片之外的設備)的一部分:例如,使用的PCI設備BAR區域實現設備控制寄存器。
緩存對性能有好處,因爲讀取和寫入緩存通常比讀寫底層RAM的速度快。高速緩存可以「捆綁」讀取和寫入,以便RAM芯片上的這些操作大大減少。缺點是通過使用它,您通常會放棄對RAM讀寫的精確控制。
主RAM通常在高速緩存控制器確定的「隨機」時間讀取和寫入,並且它通常被讀取和寫入稱爲「高速緩存行」的大塊 - 32,64或128塊一次一個字節。當你向高速緩存的內存寫入一個值時,該值可能不會寫入實際的RAM芯片,直到稍後的某個時間不確定(如果有的話:它可能會在從緩存中傳出之前被覆蓋)。這當然會把你隱藏起來成爲記憶的使用者 - 你通常甚至不需要意識到它。
但是,如果正在寫入的內存是一個控制寄存器 - 例如設置某個設備的某種模式或特徵 - 那麼您希望該寄存器的值恰好在寫入時設置,而不是不確定稍後的時間,並且您不希望寫入該寄存器影響地址空間中可能位於其附近的任何其他寄存器。同樣,如果你讀取狀態寄存器的值,它可能是「易失性」的:即它的值可能隨着同一個寄存器的兩次連續讀取而改變,所以你不希望這個值被緩存。讀取寄存器可能有副作用,所以你只需要顯式讀取來訪問它。
相關問題
- 1. 將內存設置爲通過x86 PAT不可緩存表格
- 2. 是否可以將資源存儲在內存緩存中?
- 3. mmap是否直接訪問頁面緩存或頁面緩存的副本?
- 4. 爲aspx頁面設置緩存控制
- 5. 是否可以緩存MTLLibrary或MTLFunction?
- 6. 是否可以緩存動態網頁?
- 7. 緩存是否可以提高性能?
- 8. 可緩存對象緩存
- 9. Eclipse是否有任何緩存或可能損壞的設置
- 10. 緩存malloc性能改進
- 11. 緩存或不緩存
- 12. 是否可以聲明性地配置spring.net緩存而不是使用屬性
- 13. '緩存'屬性
- 14. 是否有可能搜索火狐緩存內存和磁盤緩存
- 15. 緩存清單是否自動緩存所有頁面
- 16. 緩存頁面
- 17. 是否將緩存控制設置爲公共防止私有緩存?
- 18. (ASP.NET高速緩存API)是否可能在緩存設置過期之前從緩存中刪除項目?
- 19. java.lang.UnsupportedOperationException:Blobs不可緩存
- 20. 將頁面緩存存儲在不同位置而不是默認頁面
- 21. 緩存屬性存取
- 22. HTML5緩存 - 是否有可能爲單個URL有幾個不同的緩存?
- 23. 緩存設置
- 24. 緩存設置
- 25. 更改頁面的緩存設置
- 26. Symfony的特定頁面緩存設置
- 27. 我可以在web.config中設置緩存屬性嗎?
- 28. 保存頁面緩存
- 29. 可可和緩存
- 30. /dev/shm中的內存可以緩存在CPU緩存中嗎?