Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有一个应用程序在 Windows 上使用带有 MEM_RESERVE 标志的 VirtualAllocEx 保留一个连续的内存块。这会保留一个虚拟内存块,但不会用物理页面或页面文件块支持它。因此,访问分配的内存将导致分段错误——但其他分配不会与此虚拟内存块相交。
如何使用 mmap 为 Linux 做同样的事情?我确实注意到了这个问题的答案,但这真的保证说,如果我不接触分配的页面,1 GB 的物理内存不会分配给我的进程吗?我不想要任何颠簸的问题。
我相信您应该能够通过将匿名内存映射到PROT_NONE. 访问PROT_NONE内存会导致段错误,但内存区域将被保留,不会用于任何其他目的。如果你想分配一个非常大的内存块,添加MAP_NORESERVE以确保默认的过度使用机制不会检查你的分配。
PROT_NONE
MAP_NORESERVE
PROT_NONE通常用于堆栈末尾的“保护”页面。