在带有PROT_NONE的mmap与PROT_READ中使用mmap之间是否存在性能差异? PROT_WRITE

问题描述 投票:2回答:1

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

以下两种映射虚拟内存的方法之间是否有区别:

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)CoreTM i7-8565U CPU @ 1.80GHz

内核版本:5.3.0-46-通用#38〜18.04.1-Ubuntu SMP

c linux mmap
1个回答
2
投票

我不知道将不需要的内存保留为PROT_NONE会对性能产生任何好处,因此系统调用需要花费时间,因此几乎可以肯定,第一次使用PROT_READPROT_WRITE分配所有内存,而不是第一次进行额外的系统调用以在以后执行。如果您想在自己的系统上进行确认,则只需编写一个可以同时尝试两种方法的基准即可。

© www.soinside.com 2019 - 2024. All rights reserved.