Я пишу симулятор на основе событий, в котором каждое событие вызывает функцию обработки (узел), которая может генерировать новые события и так далее. С каждым событием связана временная метка, и их необходимо обрабатывать в порядке возрастания времени (но события не обязательно создаются в таком порядке). С этой целью я использую простой priority_queue<Event*>
, где Event — это класс, содержащий указатель на узел обработки, который необходимо вызвать, и метку времени.
Итак, все работает нормально, но я получаю миллионы событий, выделяемых и освобождаемых в секунду, и это явно то, что ограничивает скорость моего симулятора (примерно 30% времени выполнения занимает выделение памяти и освобождение объектов Event).
Я нашел этот вопрос: пул объектов против динамического распределения и кажется, что я мог бы очень большая польза от пула объектов. Хотя я видел, что Boost предлагает какой-то способ сделать это, я не уверен, что понимаю, практично ли это для реализации пула в priority_queue
. Я действительно теряюсь, когда дело доходит до пользовательского распределения памяти.
Итак, мой вопрос: было бы практично/выгодно использовать пул объектов для моего priority_queue
, и если да, то есть ли простой способ сделать это, возможно, с некоторым примером кода (или, по крайней мере, отправной точкой), желательно, не полагаясь сразу на Boost в первый раз?
На самом деле, некоторые ссылки, чтобы понять, как работает распределение пула, также будут приветствоваться!
Спасибо.