C语言 将 mmap 与 PROT_NONE 与 PROT_READ 一起使用之间是否存在性能差异 |PROT_WRIT



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

以下两种用于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型号名称 : 英特尔® 酷睿(TM( i7-8565U CPU @ 1.80GHz

内核版本 : 5.3.0-46-通用 #38~18.04.1-乌班图SMP

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

最新更新