我有一个应用程序在 Windows 上使用带有 MEM_RESERVE 标志的 VirtualAllocEx 保留一个连续的内存块。这会保留一个虚拟内存块,但不会用物理页面或页面文件 block 来支持它。因此,访问分配的内存将导致段错误——但其他分配不会与该虚拟内存块相交。
如何使用 mmap 对 Linux 执行相同的操作?我确实注意到了 this question 中的答案,但这真的能保证如果我不接触分配的页面,1 GB 的物理内存不会分配给我的进程吗?我不想要任何颠簸的问题。
最佳答案
我相信您应该能够通过使用 PROT_NONE
映射匿名内存来实现相同的目的。访问 PROT_NONE
内存将导致段错误,但内存区域将被保留,不会用于任何其他目的。如果您想分配很大的内存块,请添加 MAP_NORESERVE
以确保默认的过量使用机制不会检查您的分配。
PROT_NONE
通常用于堆栈末尾的“保护”页面。
关于linux - 如何在 Linux 中保留虚拟内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15261527/