gpt4 book ai didi

c - mmap 相同的文件,相同的物理内存?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:02:59 30 4
gpt4 key购买 nike

假设我:

  1. 打开 来自进程 A
  2. N 字节长度的只读文件 F
  3. mmapfd 只读(PROT_READ)和MAP_SHARED
  4. mlock 返回的内存范围。
  5. 进入无限循环。

我的理解是,由于 mlock,文件中的数据现在驻留并由 N 字节的物理内存页支持。内存范围的读取性能应该与使用 malloc 分配的普通内存相同。

现在,如果我在进程 A 仍在运行时创建第二个进程 B 并执行与进程 B 完全相同的步骤,支持 mmaped 文件的 N 字节物理内存页是否与进程 A 中的物理内存页相同?

也就是说,AB会一起使用N字节的物理内存吗?或者他们会使用 2*N 字节的物理内存吗?

最佳答案

当您映射文件时,页面来自维护文件内核 View 的内核页面缓存。内核中同一个文件只有一个 View 。当您多次映射文件时(无论来自哪个进程),映射的页面是来自内核页面缓存的完全相同的物理页面。

否则,当一个进程修改其 MAP_SHARED 文件映射时,保持不同内存页同步的代价会非常高。

换句话说,进程 AB 一起共享用于映射同一文件的相同 N 字节物理内存。

关于c - mmap 相同的文件,相同的物理内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55380054/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com