std :: istream_iterator, потребление памяти

Я пытаюсь перебрать текстовый файл с помощью итераторов:

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

После первой строки он читает некоторые данные из файла (он использует оператор >> для типа MyData). Как и ожидалось.

К сожалению, после этого потребление памяти растет, и кажется, istream_iterator попытался загрузить весь файл в память. Спустя несколько секунд (когда генерируются исключения out_of_memory) отладчик попадает во вторую строку. Но чтение файла не удалось, и я больше ничего не могу прочитать.

Вопросы:

Это правильное поведение для istream_iterator (загрузить файл в память)?

Я не наблюдаю это для небольших файлов (например, 20 МБ).

Может быть, для такого большого файла мне нужно использовать общий getline путь?

0

Решение

istream_iterator просто использует >> оператор по типу. Это держит максимум один экземпляр типа в памяти. При его использовании вы делать сделать копии экземпляра. Я бы заподозрил (но не увидев код), что либо ваш конструктор копирования, либо деструктор неисправен, или вы теряете память где-то в вашем >> оператор. Я был бы очень удивлен, если проблема связана с istream_iterator,

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]