2013-12-12 27 views
2

我一直在嘗試使用mmap在合理的時間內閱讀相對較大的文件。我知道mumap方法;但我的問題是,只要我使用我希望它映射到我的進程空間的文件;與此同時,由於從該文件加載太多頁到RAM中,每當我的進程開始用盡空間時,我希望它們與新頁面交換(或希望它們與lru頁面交換),而不會造成任何問題。 Kernel的內部內存管理模塊是否代表我交換或者我的責任將其移除(如果是這樣,怎麼辦?mumap?)?請考慮以下幾點:如何在Linux平臺上管理mmap的內存使用情況?

我的平臺是android(這也是一種linux平臺), 我只想讀頁面;但沒有寫(O_RDONLY和PROT_READ), 我使用MAP_SHARED因爲它可能會被所有其他進程共享(實際上,只有一個進程可以讀取:))。

在此先感謝。

回答

4

Linux內存管理器將處理從映射中丟棄的頁面,並按照需求將它們錯誤地恢復,您不需要做任何特殊的事情。映射爲PROT_READMAP_SHARED也是有幫助的,因爲這樣頁面將變得乾淨 - 內核不需要寫出物理頁面,它可以簡單地刪除它們。

如果你想協助內核,你可以告訴它,你將和將不再需要分別使用不久與madvise()MADV_WILLNEEDMADV_DONTNEED標誌的頁面。

+0

這是很好的答案。謝謝caf! – iliTheFallen

相關問題