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

时间:2013-03-07 01:38:05

标签: linux windows mmap

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

如何使用mmap为Linux做同样的事情?我确实注意到this question中的答案,但是这确实可以保证,如果我不触摸分配的页面,1 GB的物理内存将不会分配给我的进程吗?我不想要任何颠簸问题。

1 个答案:

答案 0 :(得分:5)

我相信你应该能够通过使用PROT_NONE映射匿名内存来实现同样的目标。访问PROT_NONE内存将导致段错误,但内存区域将被保留,不会用于任何其他目的。如果要分配一大块内存,请添加MAP_NORESERVE以确保默认的过度使用机制不会检查您的分配。

PROT_NONE通常用于堆栈末尾的“警卫”页面。