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