对象池与动态分配

时间:2009-08-09 09:01:15

标签: c++ memory-management object-pooling

什么时候应该优先选择对象池而不是动态分配的对象?

我需要每秒创建和销毁数千个对象。它本身是否足以决定支持对象池?

感谢。

4 个答案:

答案 0 :(得分:8)

是的,这足以决定支持对象池。

引用Boost文档

  

我什么时候应该使用Pool?

     

池通常在有时使用   大量的分配和解除分配   小物件。另一种常见用法   是上面的情况,很多   对象可能会从内存中删除。

请参阅Boost Pool

答案 1 :(得分:7)

破坏对象,解除分配,分配和构建的预期成本高于重新初始化新用途的成本。

答案 2 :(得分:7)

测量,测量,测量。然后你知道,你就不必依赖推测或指导。

此外,如果Dirk Grunwald的CustomMalloc仍然可用,请尝试一下。它综合了malloc的实现,该实现针对单个应用程序的需求进行了调整。

答案 3 :(得分:3)

通常,如果您每秒创建和销毁数千个对象,则至少应使用对象池。

您可以使用纯粹分配特定大小对象的自定义分配器。覆盖new并专门为您的对象预分配一个堆。使用位字段和数组其相对简单。

基本上,如果对象很小,则自定义堆的内存效率会更高(堆开销相对于小对象大小而言相当高);它更快;它可以防止堆碎片;它更容易调试。