如何在 Linux 平台上管理 mmap 的内存使用?

ili*_*len 3 android mmap memory-mapped-files linux-kernel

我一直在尝试使用 mmap 在合理的时间内读取相对较大的文件。我知道 mumap 方法;但我的问题是,只要我使用该文件,我就希望它映射到我的进程空间中;与此同时,每当我的进程由于从该文件加载太多页面到 RAM 而开始耗尽空间时;我希望它们与新页面交换(或希望它们与 lru 页面交换),而不会造成任何问题。内核的内部内存管理模块是否代表我处理交换,或者我有责任删除它们(如果是,如何?mumap?)?请考虑以下因素:

我的平台是android(也是linux平台的一种),我只想阅读页面;但根本没有写入(O_RDONLY 和 PROT_READ),我使用 MAP_SHARED 因为它可能被所有其他进程共享(事实上,只有一个进程可以读取:))。

提前致谢。

caf*_*caf 5

Linux 内存管理器将处理从映射中删除页面并按需将其错误返回,您无需执行任何特殊操作。映射为PROT_READMAP_SHARED也很有帮助,因为这样页面将是干净的 - 内核不需要写出物理页面,它可以简单地删除它们。

如果您madvise()帮助内核,您可以分别使用和标志来告诉它您将需要MADV_WILLNEED和不需要的页面MADV_DONTNEED