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

标签 c linux mmap

假设我:

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

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

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

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

最佳答案

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

否则,当一个进程修改其 MAP_SHARED 文件映射时,保持不同内存页面同步的成本将极其高昂。

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

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

相关文章:

c - 我怎么能做这个字符串操作?

c++ - 什么是 "Clean C",它与标准 C 有何不同?

c - 正则表达式不正确 c

C - Linux 稀疏文件 : How to check if file is sparse and print 0-filled disk blocks

linux - 如何更改 Rsync 服务器上的文件历史记录

Java FileChannel 缺少取消映射(RAM 后果?)

c - 在 spin_lock_init 和 DEFINE_SPINLOCK AND WHEN 之间更喜欢什么

Linux线程——模拟餐厅餐 table

c - 如何从 C 中的 mmap 区域获取固定大小的缓冲区?

linux - 通过 sysfs-pci 驱动程序映射 CompactPCI 设备