我想在我的进程中为以前使用但目前不需要的内存保留虚拟地址空间。我对主机内核是 Linux 的情况感兴趣,并且它被配置为防止过度使用(它通过详细说明所有已提交的内存来实现)。
如果我只是想防止我的应用程序不再使用的数据占用物理内存或被交换到磁盘(无论哪种方式都浪费资源),我可以madvise
使用不需要它的内核,或者mmap
在它上面添加新的零页。但是这两种方法都不一定会减少算作已提交的内存量,然后阻止其他进程使用这些内存量。
如果我用标记为只读的新零页替换这些页面怎么办?我的意图是它们不计入已提交的内存,并且我以后可以使用mprotect
它们使它们可写,并且如果使它们可写将超过已提交的内存限制,它将失败。我的理解正确吗?这行得通吗?