mmap()与读取块
我正在开发一个处理文件的程序,该程序的大小可能是100 GB或更大。这些文件包含一组可变长度的记录。我已经启动并运行了第一个实现,并且现在正在寻求提高性能,特别是提高I/O的效率,因为输入文件被扫描了很多次。
有什么使用的经验法则吗?mmap()
通过C+实现对块的读取fstream
图书馆?我想要做的是将大块从磁盘读入缓冲区,从缓冲区处理完整的记录,然后读取更多。
这个mmap()
代码可能会变得非常混乱,因为mmap
代码块需要位于页面大小的边界上(据我理解),记录可能会跨越页面边界。fstream
S,我可以先开始记录,然后再开始阅读,因为我们不局限于阅读位于页面大小边界上的块。
我怎样才能在这两个选项之间做出决定,而不首先编写一个完整的实现呢?任何经验法则(例如,mmap()
是快2倍)还是简单的测试?