13

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

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

谢谢。

4

4 回答 4

10

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

引用 Boost 文档

我应该什么时候使用池?

当有大量小对象的分配和释放时,通常使用池。另一个常见的用法是上述情况,其中许多对象可能会从内存中删除。

请参阅Boost Pool

于 2009-08-09T09:14:14.277 回答
8

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

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

于 2009-08-09T16:10:56.960 回答
7

销毁对象、释放、分配和构造的预期成本高于为新用途重新初始化的成本。

于 2009-08-09T09:03:51.723 回答
4

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

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

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

于 2009-08-09T09:13:35.903 回答