Пользовательское управление памятью для создания объекта на строку в файле

Это моя ситуация:

Я читаю в очень большом файле, скажем, более 1 ГБ, и для каждой строки я интерпретирую и извлекаю части строки, чтобы создать объект. Поэтому я постоянно выделяю память:

//For each line in a 1GB file:
boost::shared_ptr<MyClass>(new MyClass(part_of_line[0], part_of_line[1]));

поэтому я хотел бы написать какой-то собственный менеджер памяти. Я не делал этого раньше, и я не очень уверен, как к этому подойти, но в основном я хотел бы сгруппировать все распределения и сократить время, затрачиваемое на выделение памяти, и было бы лучше, если бы выделенная память была непрерывной.

  • Существуют ли уже существующие библиотеки (уже написанные для этой проблемной области), которые помогли бы мне добиться увеличения производительности?

  • Как вариант, в какой ситуации мне лучше написать свой собственный менеджер памяти?

    Я предполагаю, что ответ связан с тем, насколько общий пул библиотек
    написано а насколько моя ситуация отличается от общего случая ??

-1

Решение

Чтение файла в память как можно быстрее, создание объектов из файла, отображенного в памяти. Вы можете поэкспериментировать с нулевым копированием памяти, созданием объектов в протекторах и доставкой результатов в очередь.

Самый быстрый способ прочитать файл читать входные файлы, как можно быстрее? Я бы использовал boost :: interprocess.

0

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

Вы можете посмотреть на размер файла перед чтением и использовать его, чтобы оценить, сколько места вам понадобится. Затем используйте vector :: reserve для выделения смежного блока за один шаг.

0

Наибольший прирост производительности будет заключаться в том, чтобы избежать выделения каждого объекта. Вместо этого выделите массив объектов MyClass. Конечно, один существенный побочный эффект — ваша текущая стратегия управления памятью должна измениться.

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