小编Dev*_*ane的帖子

mmap'd 内存对内存压力的行为

我有一个包含图像文件的大型 tar 文件 (60GB)。我正在使用mmap()整个文件来读取这些随机访问的图像。

我使用mmap()的原因如下:

  1. 线程安全——我无法从多个线程中寻找 ifstream。
  2. 我可以避免额外的缓冲。
  3. 我得到了一些缓存(以已驻留的请求页面的形式。)

问题是当我阅读了那个 60GB 文件中的每个图像时会发生什么?当然,并不是所有的图像都被一次使用——它们被读取、显示,然后被丢弃。

我的mmap()电话是:

mmap(0, totalSize, PROT_READ, MAP_SHARED | MAP_NORESERVE, fd, 0); 
Run Code Online (Sandbox Code Playgroud)

问题是:内核是否看到我映射了由文件支持的只读页面,并在内存压力下简单地清除未使用的页面?我不确定这种情况是否被认可。手册页表明MAP_NORESERVE不需要备份交换空间,但似乎不能保证在内存压力下页面会发生什么。是否有任何保证内核会在它之前清除我不需要的页面,例如清除文件系统缓存或 OOM 的另一个进程?

谢谢!

linux memory large-files mmap

5
推荐指数
1
解决办法
2693
查看次数

标签 统计

large-files ×1

linux ×1

memory ×1

mmap ×1