我有一个包含图像文件的大型 tar 文件 (60GB)。我正在使用mmap()
整个文件来读取这些随机访问的图像。
我使用mmap()
的原因如下:
问题是当我阅读了那个 60GB 文件中的每个图像时会发生什么?当然,并不是所有的图像都被一次使用——它们被读取、显示,然后被丢弃。
我的mmap()
电话是:
mmap(0, totalSize, PROT_READ, MAP_SHARED | MAP_NORESERVE, fd, 0);
Run Code Online (Sandbox Code Playgroud)
问题是:内核是否看到我映射了由文件支持的只读页面,并在内存压力下简单地清除未使用的页面?我不确定这种情况是否被认可。手册页表明MAP_NORESERVE
不需要备份交换空间,但似乎不能保证在内存压力下页面会发生什么。是否有任何保证内核会在它之前清除我不需要的页面,例如清除文件系统缓存或 OOM 的另一个进程?
谢谢!