Mmap
映射非常大的文件
我有一個非常大的磁碟驅動器 (2TB),但不是很多 RAM (8GB)。我希望能夠在我的磁碟文件系統上存在的一個大文件(~200GB)上執行一些大數據實驗。我知道這在磁碟頻寬方面會非常昂貴,但我不介意高 I/O 使用率。
如何將這個巨大的文件載入到 C++ 數組中,以便可以在我選擇的位置對文件執行讀寫操作?mmap 是否適用於此目的?我應該使用哪些參數選項來執行此操作?我不想在執行程序的任何時候觸發 OOM 殺手。
我知道 mmap 支持文件支持和匿名映射,但我不完全確定使用哪個。使用私有映射與共享映射之間怎麼樣?
只有使用文件支持的映射來映射文件才有意義,而不是匿名映射。如果要寫入映射記憶體並將更改寫回文件,則需要使用共享映射。使用文件支持的共享映射,您無需擔心 OOM 殺手,因此只要您的程序是 64 位,只需將整個文件映射到記憶體就沒有問題。(即使您不是 64 位,問題也將是地址空間不足,而不是 RAM 不足,因此 OOM 殺手仍然不會影響您;您的 mmap 只會失敗。)