对象池与动态分配
回答
破坏对象,取消分配,分配和构造的预期成本高于重新初始化新用途的成本。
我会说“可能很低” - 完全有可能(甚至可能)初始化是昂贵的阶段。 – 2009-08-09 09:13:18
我改写了我的答案。阅读其他答案,似乎我是唯一一个在对象池(其中保存了一个可供使用的构造对象列表)和内存池(这是一种延迟释放的内存管理技术)有时是毁灭,有时毁灭完全没有完成 - 所以它是一步完成的)。 – AProgrammer 2009-08-09 09:26:01
我不确定我明白你在这里说什么。我一直认为对象池的好处只是内存重用?所有新对象都需要构建,无论如何都会破坏所有旧对象 - 您无法在那个时间保存? – 2009-08-10 09:40:26
通常,如果您每秒创建并销毁数千个对象,则至少应该使用对象池。
您可以使用纯分配特定大小对象的自定义分配器。重写新的并预先为您的对象分配一个堆。使用位域和数组相对简单。
如果对象很小,基本上自定义堆的内存效率更高(相对于小对象大小,堆开销相当高);它更快;它可以防止堆碎片;它更容易调试。
是的,这足以支持对象池。
报价Boost文档
何时应该使用池?
通常使用池时有很多 大量的分配和释放 的小对象。另一种常见用法 是上面的情况,其中很多对象可能会从内存中丢失。
测量,测量,测量。那么你会知道,你将不必依赖于猜测或指导。
此外,如果Dirk Grunwald的CustomMalloc仍然可用,请尝试一下。它综合了针对单个应用程序的需求而调整的malloc
的实现。
像往常一样 - 这取决于。如果你可以使用对象池,你显然不需要创建和销毁东西。所以我们需要更多的细节。 – 2009-08-09 09:14:35