【发布时间】:2011-03-08 22:06:43
【问题描述】:
我正在编写一个基于事件的模拟器,其中每个事件都会调用一个可以生成新事件的处理函数(节点),依此类推。
时间戳与每个事件相关联,它们需要按时间增加的顺序进行处理(但事件不一定按该顺序创建)。为此,我使用了一个简单的priority_queue<Event*>,其中 Event 是一个包含指向必须调用的处理节点的指针和时间戳的类。
所以,一切正常,但我每秒分配和释放数百万个事件,这显然是限制我的模拟器速度的原因(大约 30% 的执行时间用于 Event 对象的内存分配和释放)。
我发现了这个问题:
Object pool vs. dynamic allocation 似乎我可以从对象池中受益匪浅。虽然我已经看到 Boost 提供了一些方法来做到这一点,但我不确定这对于在 priority_queue 中实现池是否实用。当谈到自定义内存分配时,我真的很迷茫。
所以我的问题是:为我的priority_queue 使用对象池是否实用/有益,如果是的话,是否有一种简单的方法可以做到这一点,也许还有一些代码示例(或至少是一个起点),最好不要在第一次立即依赖 Boost?
实际上也欢迎一些参考来了解池分配的工作原理!
谢谢。
【问题讨论】:
-
只需确保在初始化时为您的池预分配一个大块,您将需要进行一些测量以了解随时需要的最高项目数,以避免完全动态分配
标签: c++ priority-queue event-driven