我如何在Linux中保留虚拟内存?

我有一个应用程序使用MEM_RESERVE标志在Windows上使用VirtualAllocEx保留一个连续的内存块。 这将保留虚拟内存块,但不会将其与物理页面或页面文件块一起备份。 因此,访问分配的内存将导致分段错误 – 但其他分配不会与此虚拟内存块相交。

我如何使用mmap对Linux进行同样的操作? 我在这个问题上注意到了答案,但是这确实能保证说,如果我不触摸分配的页面,1 GB的物理内存不会分配给我的进程? 我不想要任何颠簸的问题。

我相信你应该可以通过映射匿名内存与PROT_NONE来达到同样的PROT_NONE 。 访问PROT_NONE内存将导致段错误,但内存区域将被保留,不能用于任何其他目的。 如果你想分配一个非常大的内存块,添加MAP_NORESERVE来确保默认的overcommit机制不会检查你的分配。

PROT_NONE通常用于堆栈末尾的“保护”页面。