我正在开发一个程序,用于处理可能达到100GB或更大容量的文件。 这些文件包含可变长度logging的集合。 我已经完成了第一个实现,现在正在寻求提高性能,特别是在更高效地执行I / O操作之后,因为input文件被多次扫描。 有没有经验法则使用mmap()与通过C ++的fstream库读取块? 我想要做的是从磁盘读取大块到缓冲区,从缓冲区处理完整的logging,然后阅读更多。 mmap()代码可能会变得非常混乱,因为mmap的d块需要位于页面大小的边界(我的理解),logging可能跨越页面边界。 有了fstream ,我只需要开始logging并重新阅读,因为我们不限于阅读位于页面大小边界上的块。 如何在不实际编写完整实现的情况下,在这两个选项之间做出决定? 任何经验法则(例如, mmap()快两倍)或简单的testing?
我基本上是在寻找一个C ++版本的fdopen()。 我在这方面做了一些研究,看起来应该很容易,但其实是一件很复杂的事情。 我是否错过了这个信念(即它真的很容易)? 如果不是,那里有一个好的图书馆来处理这个问题吗? 编辑:将我的示例解决scheme移到一个单独的答案。
以下C ++代码使用ifstream对象从文本文件(每行有一个数字)读取整数,直到它遇到EOF 。 为什么它读取最后一行的整数两次? 如何解决这个问题? 码: #include <iostream> #include <fstream> using namespace std; int main() { ifstream iFile("input.txt"); // input.txt has integers, one per line while (!iFile.eof()) { int x; iFile >> x; cerr << x << endl; } return 0; } input.txt : 10 20 30 输出 : 10 20 30 30 注意 :我跳过了所有错误检查代码,以保持代码片段小。 […]