我一直在尝试使用mmap在合理的时间内读取相对较大的文件。我知道mumap方法;但我的问题是,只要我使用该文件,我希望它在我的进程空间中映射;同时,每当我的进程由于从该文件中将太多页面加载到RAM中而开始耗尽空间时;我希望它们与新页面交换(或希望它们与lru页面交换),而不会造成任何问题。 Kernel的内部内存管理模块是否代表我处理交换或者我有责任删除它们(如果是,如何?mumap?)?请考虑以下因素:
我的平台是android(也是一种linux平台), 我只想阅读页面;但根本没有写(O_RDONLY和PROT_READ), 我使用MAP_SHARED,因为它可能被所有其他进程共享(实际上,只有一个进程可以读取:))。
提前致谢。
答案 0 :(得分:4)
Linux内存管理器将处理从您的映射中删除页面并按需将其断开,您不需要做任何特殊操作。映射为PROT_READ
和MAP_SHARED
也很有用,因为页面将是干净的 - 内核不需要写出物理页面,它可以简单地删除它们。
如果您想要来协助内核,您可以使用madvise()
和{{1}将MADV_WILLNEED
告诉它您将不会很快需要的页面分别标记。