istream_iterator,内存消耗

std::istream_iterator, memory consumption

本文关键字:内存 iterator istream      更新时间:2023-10-16

我尝试使用迭代器遍历文本文件:

1) std::istream_iterator<MyData> itRecordStreamBegin(fileStream);
2) std::istream_iterator<MyData> itRecordStreamEnd; 

在第一行之后,它从文件中读取一些数据(它对MyData类型使用操作符>>)。如预期。

不幸的是,之后内存消耗上升,似乎istream_iterator试图在内存中加载整个文件。几秒钟后(当抛出out_of_memory异常时),调试器进入第二行。但是文件读取失败,我不能再读取任何东西。

:

这是istream_iterator的正确行为(将文件加载到内存)吗?

对于较小的文件(如20MB),我没有观察到这种情况。

也许对于如此大的文件,我需要使用常见的getline方式?

istream_iterator仅对该类型使用>>操作符。它在内存中最多保留一个类型的实例。当使用它时,复制实例。我会怀疑(但没有看到代码)您的复制构造函数或析构函数有缺陷,或者您在>>操作符的某个地方泄漏了内存。如果问题与istream_iterator有关,我会非常惊讶。