tgo*_*art 2 linux swap mmap pagefile virtual-memory
希望标题清楚.我有一块通过mmap()获得的内存.过了一段时间,我得出结论,我不再需要这个范围内的数据.不过,我仍然希望保持这个范围.也就是说,我不想调用mummap().我想成为一个好公民,而不是让系统交换超出需要.
有没有办法告诉Linux内核,如果给定的页面是由物理页的支持和如果内核决定它需要一个物理页面,也懒得写一个页面交换?
我想在幕后这个神奇的函数调用会破坏给定虚拟页面和物理页面之间的任何映射(如果存在),而不首先写入交换.
你的问题(如上所述)毫无意义.
让我们假设有一种方法可以告诉内核做你想做的事情.
让我们进一步假设它确实需要额外的RAM,因此它会占用您的页面,并且不会将其交换掉.
现在你的程序试图读取该页面(因为你不想要munmap数据,可能你可能试图访问它).内核要做什么?我看到的选择:
SIGSEGV如果您想要选择2,您可以获得相同的结果munmap.
如果你想要选择1,你可以mremap覆盖现有的映射MAP_ANON(或者munmap后面跟着new mmap).
在任何一种情况下,您都无法在需要时依赖旧数据.
你的问题将是有意义的唯一方法是,如果有是为内核,让你知道它一些额外的机制被夺走了你们的网页(例如您发送一个特殊的信号).但是你描述的情况很可能足以保证额外的复杂性.
编辑:
你可能正在寻找 madvise(..., MADV_DONTNEED)