linux - 如何在 Linux 中保留虚拟内存?

标签 linux windows mmap

我有一个应用程序在 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/

相关文章:

android - Android 上的 Http 持久连接以及从 wi-fi 切换到蜂窝网络

在 C 中工作时,在 Rust 中使用 Linux 的直接渲染管理器在 dumbuffer 上调用 mmap 失败

c - Linux 将虚拟内存范围映射到现有的虚拟内存范围?

windows - Vista/7 的 OpenGL 最多 32 个屏幕窗口

c# - Windows 更新 "file modified"时间戳需要什么?

C++ TCP 套接字插件

c++ - 限制用于 mmap 的缓冲区缓存

linux - 制造用于扩展wifi网络的wifi链接设备

linux - 如何通过在目录及其子目录中递归搜索来随机播放.mp3 歌曲?

php - PDFTK 和 PDF2PS 不能很好地协同工作