我寫基於事件的模擬器,其中,每個事件調用的處理功能(節點),其可以產生新的事件,等等。 時間戳被關聯到每個事件,並需要在增加的時間(但事件不一定按該順序創建的)的順序進行處理。爲此,我使用一個簡單的priority_queue<Event*>
,其中Event是一個包含指向必須調用的處理節點的指針和時間戳的類。池內存分配在一個優先級隊列
所以,一切正常,但我得到了數百萬事件分配和每秒釋放,這顯然是什麼限制了我的模擬器的速度(大約30%的執行時間是由內存分配和釋放事件對象)。
我發現這個問題: Object pool vs. dynamic allocation,它似乎我可以非常受益於對象池。雖然我看到Boost提供了一些方法來實現這一點,但我不確定要明白這是否適用於在priority_queue
中實現池。當涉及到自定義內存分配時,我真的迷失了方向。
所以我的問題是:會是實用的/有益的使用對象池我priority_queue
,如果是,有一個簡單的方法來做到這一點,有可能一些代碼示例(或至少是一個開始點),最好不要立即依靠Boost第一次?
竟有些裁判明白池分配的工作方式也將受到歡迎!
謝謝。
只需確保爲您的應用程序預分配一個大塊在初始化池中,您需要做一些測量,以瞭解在任何時候需要的最高數量的項目,以完全避免動態分配 – lurscher 2011-03-11 17:58:14