我有一个应用程序使用MEM_RESERVE标志在Windows上使用VirtualAllocEx保留一个连续的内存块。 这将保留虚拟内存块,但不会将其与物理页面或页面文件块一起备份。 因此,访问分配的内存将导致分段错误 – 但其他分配不会与此虚拟内存块相交。
我如何使用mmap对Linux进行同样的操作? 我在这个问题上注意到了答案,但是这确实能保证说,如果我不触摸分配的页面,1 GB的物理内存不会分配给我的进程? 我不想要任何颠簸的问题。
我相信你应该可以通过映射匿名内存与PROT_NONE
来达到同样的PROT_NONE
。 访问PROT_NONE
内存将导致段错误,但内存区域将被保留,不能用于任何其他目的。 如果你想分配一个非常大的内存块,添加MAP_NORESERVE
来确保默认的overcommit机制不会检查你的分配。
PROT_NONE
通常用于堆栈末尾的“保护”页面。