对象池与动态分配

jac*_*hab 13 c++ memory-management object-pooling

应该何时更喜欢对象池而不是动态分配的对象?

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

谢谢.

Dia*_*ami 9

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

引用Boost文档

我什么时候应该使用Pool?

当存在大量小对象的分配和释放时,通常使用池.另一种常见用法是上面的情况,其中许多对象可能会从内存中丢失.

请参阅Boost Pool


Nor*_*sey 8

测量,测量,测量.然后你会知道,你不必依赖猜测或指导.

此外,如果Dirk Grunwald的CustomMalloc仍然可用,请尝试一下.它综合了一个实现,malloc可以满足单个应用程序的需求.


APr*_*mer 7

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

  • 我会说"可能很低" - 完全可能(甚至可能)初始化是昂贵的阶段. (3认同)

小智 5

一般来说,如果您每秒创建和销毁数千个对象,您至少应该使用对象池。

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

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