對象池與動態分配
回答
破壞對象,取消分配,分配和構造的預期成本高於重新初始化新用途的成本。
我會說「可能很低」 - 完全有可能(甚至可能)初始化是昂貴的階段。 – 2009-08-09 09:13:18
我改寫了我的答案。閱讀其他答案,似乎我是唯一一個在對象池(其中保存了一個可供使用的構造對象列表)和內存池(這是一種延遲釋放的內存管理技術)有時是毀滅,有時毀滅完全沒有完成 - 所以它是一步完成的)。 – AProgrammer 2009-08-09 09:26:01
我不確定我明白你在這裏說什麼。我一直認爲對象池的好處只是內存重用?所有新對象都需要構建,無論如何都會破壞所有舊對象 - 您無法在那個時間保存? – 2009-08-10 09:40:26
通常,如果您每秒創建並銷燬數千個對象,則至少應該使用對象池。
您可以使用純分配特定大小對象的自定義分配器。重寫新的並預先爲您的對象分配一個堆。使用位域和數組相對簡單。
如果對象很小,基本上自定義堆的內存效率更高(相對於小對象大小,堆開銷相當高);它更快;它可以防止堆碎片;它更容易調試。
是的,這足以支持對象池。
報價Boost文檔
何時應該使用池?
通常使用池時有很多 大量的分配和釋放 的小對象。另一種常見用法 是上面的情況,其中很多對象可能會從內存中丟失。
測量,測量,測量。那麼你會知道,你將不必依賴於猜測或指導。
此外,如果Dirk Grunwald的CustomMalloc仍然可用,請嘗試一下。它綜合了針對單個應用程序的需求而調整的malloc
的實現。
像往常一樣 - 這取決於。如果你可以使用對象池,你顯然不需要創建和銷燬東西。所以我們需要更多的細節。 – 2009-08-09 09:14:35