在std :: istream

时间:2015-07-24 08:54:20

标签: c++ boost

我想在一些大文件(几百GB)上使用boost::algorithm::knuth_morris_pratt。这意味着我不能将整个文件读入内存,也不能mmap,我需要以块的形式阅读。

knuth_morris_pratt在迭代器上运行,所以我猜它可以让它读取输入数据"懒惰" (按需),这将是一个写"懒惰"某些文件访问类的迭代器,如ifstream,或更好istream

我想知道是否有一些适用于istream的适配器(已编写)适用于Boost的knuth_morris_pratt,以便它无法读取所有文件数据一旦?

我知道有一个boost::spirit::istream_iterator,但它缺少一些方法(如operator+),所以必须修改它才能正常工作。

在StackOverflow上有bidirectional_iterator here的实现,但在与knuth_morris_pratt一起使用之前仍需要一些工作。

是否已编写已经编写,已经过测试并正常工作的<{1}}迭代器?

更新:我无法istream,因为我的软件应该在多个操作系统上运行,无论是在32位还是64位架构上。此外,我经常无法获取文件,它们是即时生成的,这就是我搜索涉及流的解决方案的原因。

1 个答案:

答案 0 :(得分:0)

你应该简单地记忆它。

实际上,64位处理器通常具有48位地址空间,足以容纳256TB的内存。

  

最后我检查过,Linux在x86-64

上允许每个进程128TB的虚拟地址空间

(来自https://superuser.com/a/168121/75721

Spirit istream_iterator实际上是multi_pass_adaptor,它有不同的设计目标。除非你有办法刷新缓冲区,否则它将无限增长(默认情况下会分配一个deque缓冲区)。