我写基于事件的模拟器,其中,每个事件调用的处理功能(节点),其可以产生新的事件,等等。 时间戳被关联到每个事件,并需要在增加的时间(但事件不一定按该顺序创建的)的顺序进行处理。为此,我使用一个简单的priority_queue<Event*>
,其中Event是一个包含指向必须调用的处理节点的指针和时间戳的类。池内存分配在一个优先级队列
所以,一切正常,但我得到了数百万事件分配和每秒释放,这显然是什么限制了我的模拟器的速度(大约30%的执行时间是由内存分配和释放事件对象)。
我发现这个问题: Object pool vs. dynamic allocation,它似乎我可以非常受益于对象池。虽然我看到Boost提供了一些方法来实现这一点,但我不确定要明白这是否适用于在priority_queue
中实现池。当涉及到自定义内存分配时,我真的迷失了方向。
所以我的问题是:会是实用的/有益的使用对象池我priority_queue
,如果是,有一个简单的方法来做到这一点,有可能一些代码示例(或至少是一个开始点),最好不要立即依靠Boost第一次?
竟有些裁判明白池分配的工作方式也将受到欢迎!
谢谢。
只需确保为您的应用程序预分配一个大块在初始化池中,您需要做一些测量,以了解在任何时候需要的最高数量的项目,以完全避免动态分配 – lurscher 2011-03-11 17:58:14