R..*_*R.. 8 c linux mmap memory-overcommitment
我希望在我的进程中为以前使用但目前不需要的内存保留虚拟地址空间.我对主机内核是Linux的情况感兴趣,并且它被配置为防止过度使用(通过详细计算所有已提交的内存来实现).
如果我只是想阻止我的应用程序不再使用的数据占用物理内存或交换到磁盘(无论哪种方式浪费资源),我可以madvise在内核中不需要它,或者mmap新的零页面.但是这些方法都不一定会减少计数为已提交的内存量,然后阻止其他进程使用.
如果我将页面替换为标记为只读的新零页怎么办?我的意图是它们不计入已提交的内存,并且我可以在以后使用它mprotect来使它们可写,并且如果使它们可写将失败将超过提交的内存限制.我的理解是否正确?这会有用吗?
如果您不使用该页面(读取或写入该页面),则该页面不会提交到您的地址空间(仅保留)。
但你的地址空间是有限的,所以你不能随心所欲地玩它。
例如,请参阅 ElectricFence,由于插入“空页/保护页”(无法访问的匿名内存),大量分配可能会失败。看看这些线程:“mprotect() 失败:无法分配内存”: http: //thread.gmane.org/gmane.comp.lib.glibc.user/538/focus=976052