对象池与动态分配

发布于 2024-08-01 12:41:33 字数 87 浏览 12 评论 0原文

什么时候应该选择对象池而不是动态分配的对象?

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

谢谢。

When should one prefer object pool over dynamically allocated objects?

I need to create and destroy thousands of objects per second. Is it by itself enough to decide in favor of object pool?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

纸短情长 2024-08-08 12:41:33

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

引用Boost文档

什么时候应该使用池?

池通常在有情况时使用
大量的分配和释放
小物体。 另一种常见用法
就是上面的情况,很多
对象可能会从内存中删除。

请参阅 Boost Pool

Yes, this is enough to decide in favor of object pool.

Quoting Boost documentation

When should I use Pool?

Pools are generally used when there is
a lot of allocation and deallocation
of small objects. Another common usage
is the situation above, where many
objects may be dropped out of memory.

See Boost Pool library

执妄 2024-08-08 12:41:33

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

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

Measure, measure, measure. Then you'll know, and you won't have to rely on speculation or guidelines.

Also, if Dirk Grunwald's CustomMalloc is still available, give it a try. It synthesizes an implementation of malloc that is tuned to the needs of a single application.

谜泪 2024-08-08 12:41:33

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

The expected cost of destructing the object, deallocation, allocation and construction is higher than the cost of reinitializing for a new use.

殤城〤 2024-08-08 12:41:33

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

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

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

Generally if you're creating and destroying thousands of objects a second you should at least use an object pool.

You could use a custom allocator which purely allocates objects of a specific size. Override new and pre allocate a heap specifically for your objects. Using a bit field and an array its relatively simple.

Basically a custom heap is more memory efficient if the objects are small (the heap overhead is quite high relative to small objects size); Its faster; It prevents heap fragmentation; And its easier to debug.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文