什么时候应该优先选择对象池而不是动态分配的对象?
我需要每秒创建和销毁数千个对象。它本身是否足以决定支持对象池?
感谢。
答案 0 :(得分:8)
是的,这足以决定支持对象池。
引用Boost文档
我什么时候应该使用Pool?
池通常在有时使用 大量的分配和解除分配 小物件。另一种常见用法 是上面的情况,很多 对象可能会从内存中删除。
请参阅Boost Pool库
答案 1 :(得分:7)
破坏对象,解除分配,分配和构建的预期成本高于重新初始化新用途的成本。
答案 2 :(得分:7)
测量,测量,测量。然后你知道,你就不必依赖推测或指导。
此外,如果Dirk Grunwald的CustomMalloc仍然可用,请尝试一下。它综合了malloc
的实现,该实现针对单个应用程序的需求进行了调整。
答案 3 :(得分:3)
通常,如果您每秒创建和销毁数千个对象,则至少应使用对象池。
您可以使用纯粹分配特定大小对象的自定义分配器。覆盖new并专门为您的对象预分配一个堆。使用位字段和数组其相对简单。
基本上,如果对象很小,则自定义堆的内存效率会更高(堆开销相对于小对象大小而言相当高);它更快;它可以防止堆碎片;它更容易调试。