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