在算法需要时映射整个文件与映射大块有什么优点/缺点?
直观地说,我认为最简单的方法是映射整个文件然后让操作系统在需要时处理读/写磁盘而不是进行大量系统调用,因为操作系统实际上并没有读取映射访问之前的文件。至少在64位系统上,地址空间不是问题。
某些背景信息:
这是针对在I / O算法课程中开发的外部优先级堆。我们的测量表明,只需映射整个底层文件而不是在需要时映射块(树中的节点)稍微好一点。然而,我们的教授不相信我们的测量结果,并表示他并不期望这种行为。有什么我们遗失的吗?
我们将mmap
与PROT_READ | PROT_WRITE
和MAP_SHARED
一起使用。
谢谢, 拉塞
答案 0 :(得分:1)
如果您有VM空间,只需映射整个文件。正如其他人已经说过的那样,这使操作系统能够最大程度地灵活地进行预读,或者即使它没有,它也会根据需要通过页面错误引入数据,因为它们比系统调用更有效当系统已经处于正确的内核环境中时。
不确定为什么你的教授不期望这种行为,但是理解他的理由会很好吗?