12
mmap()与阅读块
我正在开发一个程序,该程序将处理大小可能为100GB或更大的文件。这些文件包含可变长度记录集。我已经启动并运行了第一个实现,现在正寻求提高性能,尤其是由于输入文件被扫描了多次,因此更有效地执行I / O。 是否有mmap()通过C ++ fstream库读取和使用块的经验法则?我想做的是从磁盘将大块读取到缓冲区中,从缓冲区中处理完整的记录,然后再读取更多内容。 该mmap()代码可能会得到非常混乱,因为mmap“d块需要躺在页大小的边界(我的理解)和记录可能潜在般划过页面边界。使用fstreams时,由于我们不限于读取位于页面大小边界上的块,因此我只能寻求记录的开头并再次开始读取。 我如何在这两个选项之间做出选择,而无需先实际编写完整的实现?有任何经验法则(例如mmap()快2倍)还是简单测试?