我想mmap
一個大文件進入內存,並順序解析它。據我瞭解,如果字節一度被懶惰地讀入內存,他們會留在那裏。有沒有辦法定期告訴系統釋放先前讀取的內容?閱讀mmapped數據內存高效
0
A
回答
1
這種理解只是一個非常膚淺的觀點。 要了解真正發生的情況,您必須考慮過程的虛擬內存與機器的實際內存之間的差異。映射一個巨大的文件意味着在虛擬地址空間中保留空間。如果在這一點上已經閱讀了任何內容,那麼這可能與平臺有關。當您實際訪問數據時,操作系統必須填充實際的內存頁面。當您訪問其他部件時,這些部件必須被帶入內存。當它重新使用內存時,完全取決於操作系統。通常情況下,當您或其他進程訪問某些數據並且沒有可用內存時會發生這種情況。但隨時都可能發生。如果您稍後再次訪問它,它可能仍在內存中,或者會被操作系統帶回。沒有辦法讓你的過程分清差異。
總之:你不需要關心這一點。操作系統管理所有在後臺。
有一點可能是,如果你映射一個非常大的文件,這會佔用虛擬地址空間中的空間,這是有限的。所以如果你處理很多巨大的映射和巨大的分配,你可能只想在給定的時間映射文件的一部分。
ADDITION:在想了一下之後,我想出了一個理由,爲什麼它可能更智能地進行分段順序。儘管我懷疑你能夠衡量這一點。 任何合理OS將尋找一個塊卸載時,需要在類似如下的命令:
- 未映射文件(不再需要)
- LRU未修改映射文件(可以從光盤檢索)
- LRU改性映射文件(與2,但需要在卸載前盤被更新)
- LRU分配的內存(需要被寫入到交換)
所以取消映射塊的已知在你不去的時候再次使用它,你會給操作系統一個提示,告訴它們應該儘早釋放它們。這會給最近使用的數據,但可能在將來訪問的數據留在內存中的機會更大。
相關問題
- 1. 內存/高效數據庫條目
- 2. 閱讀杜高斯貝數據文件
- 3. 內存高效multivaluemap
- 4. 高效地存儲數據
- 5. 高效地閱讀兩個文本框
- 6. 閱讀CSV - 內存問題
- 7. 閱讀數組內
- 8. 覆蓋mmapped文件中間數據的有效方法
- 9. 從SQL閱讀器到數據表的數據 - 無效嘗試打電話在閱讀器關閉時閱讀
- 10. 如何告訴屏幕閱讀器應閱讀數據內容?
- 11. 高效讀寫熊貓數據幀
- 12. 高效讀取大量數據
- 13. 高效讀寫mysql數據庫
- 14. 閱讀內容數據對象
- 15. 閱讀Safari數據庫內容
- 16. 內存高效排序C++
- 17. Java:內存高效ByteArrayOutputStream
- 18. GAE閱讀從數據存儲
- 19. 閱讀.plist文件數據並用python記錄到內存中
- 20. Android閱讀pdf元數據 - 內存問題
- 21. 閱讀plist存儲在內存NSDictionary
- 22. Google閱讀器存檔Feed無效xml?
- 23. 閱讀grib2數據
- 24. 閱讀excel數據
- 25. 閱讀Json數據
- 26. 閱讀firebase數據
- 27. 閱讀數據集
- 28. 閱讀數據集
- 29. 內存Trie實現的高效數據結構
- 30. 存儲數據的高效方式
'總之你:你不需要關心那件事。操作系統在後臺管理。「這更好。謝謝! –