我有一个应用程序,使用带有MEM_RESERVE标志的Windows上的VirtualAllocEx保留连续的内存块.这会保留虚拟内存块,但不会使用物理页面或页面文件块进行备份.因此,访问分配的内存将导致分段错误 – 但其他分配将不会与此虚拟内存块相交.
如何使用mmap为Linux做同样的事情?我确实在this question中注意到了答案,但这确实可以保证,如果我不触摸分配的页面,1 GB的物理内存将不会分配给我的进程吗?我不想要任何颠簸问题.
解决方法:
我相信您应该能够通过使用PROT_NONE映射匿名内存来实现相同目的.访问PROT_NONE内存将导致段错误,但内存区域将被保留,不会用于任何其他目的.如果要分配一大块内存,请添加MAP_NORESERVE以确保默认的过度使用机制不会检查您的分配.
PROT_NONE通常用于堆栈末尾的“防护”页面.