【发布时间】:2017-12-24 20:15:20
【问题描述】:
我所知道的是 mmap 可以将进程的虚拟内存页面映射到磁盘上文件的页面。我们可以在程序中对内存进行读写操作,它会反映在文件的内容中。
这种机器如何使文件的顺序读取(可能还有处理)比常规读取系统调用更快?它如何使搜索(如果文件已排序,则进行二进制搜索)更快?
我从多个来源了解到 mmap 确实完成了我所说的,但我找不到任何详细说明。
【问题讨论】:
-
与内存访问相比,系统调用非常慢。在
mmap的情况下,将从文件中提取一定数量的页面并加载到分配给进程的物理页面中。仅当您读/写的内容超过已加载的内容时,才会出现页面错误并且处理器将进入内核。但是如果你使用重复的reads,大部分时间都会有一个系统(操作系统确实缓冲一点),它会更慢。 -
@AjayBrahmakshatriya 如果读取大块数据,系统调用开销可以忽略不计。不过,您不应该尝试按字节读取文件...
-
@Ctx 用户提到了二分搜索。所以我认为他们会在文件中执行一系列 fseek 和小 freads。
-
@AjayBrahmakshatriya fread 没问题,因为它是缓冲的。