ili*_*len 3 android mmap memory-mapped-files linux-kernel
我一直在尝试使用 mmap 在合理的时间内读取相对较大的文件。我知道 mumap 方法;但我的问题是,只要我使用该文件,我就希望它映射到我的进程空间中;与此同时,每当我的进程由于从该文件加载太多页面到 RAM 而开始耗尽空间时;我希望它们与新页面交换(或希望它们与 lru 页面交换),而不会造成任何问题。内核的内部内存管理模块是否代表我处理交换,或者我有责任删除它们(如果是,如何?mumap?)?请考虑以下因素:
我的平台是android(也是linux平台的一种),我只想阅读页面;但根本没有写入(O_RDONLY 和 PROT_READ),我使用 MAP_SHARED 因为它可能被所有其他进程共享(事实上,只有一个进程可以读取:))。
提前致谢。
Linux 内存管理器将处理从映射中删除页面并按需将其错误返回,您无需执行任何特殊操作。映射为PROT_READ和MAP_SHARED也很有帮助,因为这样页面将是干净的 - 内核不需要写出物理页面,它可以简单地删除它们。
如果您想madvise()帮助内核,您可以分别使用和标志来告诉它您将需要MADV_WILLNEED和不需要的页面MADV_DONTNEED。
| 归档时间: |
|
| 查看次数: |
1052 次 |
| 最近记录: |