c - 将 mmap 与 PROT_NONE 与 PROT_READ 结合使用之间是否存在性能差异?保护写入

标签 c linux mmap

我想映射更大的内存区域,我希望只使用其中的一小部分。使用的内存需要读写权限。

下面两种映射虚拟内存的方法有区别吗:

mmap(0, size, PROT_NONE, MAP_ANONYMOUS | MAP_PRIVATE | MAP_NORESERVE, (-1), 0)

然后使用

mprotect(address, length, PROT_READ | PROT_WRITE) 

当我需要一个页面时

与仅使用 PROT_READ 映射整个区域 | PROT_WRITE 权限从一开始即

mmap(0, size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE | MAP_NORESERVE, (-1), 0)

编辑以更好地融入我的平台:

CPU 型号名称:Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz

内核版本:5.3.0-46-generic#38~18.04.1-Ubuntu SMP

最佳答案

我不知道将不需要的内存保留为 PROT_NONE 有任何性能优势,而且系统调用需要时间,因此使用 PROT_READ 分配所有内存几乎肯定会更快> 和 PROT_WRITE,而不是在以后进行额外的系统调用。如果您想在自己的系统上确认这一点,那么只需编写一个测试这两种方式的基准测试即可。

关于c - 将 mmap 与 PROT_NONE 与 PROT_READ 结合使用之间是否存在性能差异?保护写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61845079/

相关文章:

更改虚拟页面权限

linux - 自定义 CFEngine3 临时下载文件位置

php - CakePHP 错误 : cake_core_ cache was unable to write 'cake_dev_en-us' on Centos

iphone - 内存映射 UIImage

c - 如何实现或模拟 MADV_ZERO?

Python/Ctypes - 访问指针(数组)时出现段错误

c - C 算法中的平方根问题

linux - 我可以在 Windows 版 GitBash 上使用 Linux 命令吗

perl - 从磁盘读取 10 GB 文件的最快方法是什么?

c++ - 如何使用 GMP 创建 float 组?