5

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

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

4

1 回答 1

9

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

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

于 2013-03-07T01:46:53.477 回答