用于频繁分配和释放的基于轻树的数据结构的内存分配器

问题描述 投票:1回答:1

我有一个基于二叉树的数据结构,该结构在O(log N)中进行所有操作。它通过newdelete分配/取消分配内存。在我的典型用法中,该数据结构使用了40分钟,并分配/取消分配了小块树节点十亿次。该数据结构的总内存占用量很低,因为取消分配的发生足够快。这已被确定为性能瓶颈。

我正在考虑重载运算符newdelete或修改我现有的代码,以便能够使用分配器并为此目的创建自定义分配器。我正在考虑预先分配连续的大量内存,并从中重新使用内存块。 C ++ 11标准是否具有基于池的内存分配器?

哪种内存分配/取消分配策略最适合这种用法?

c++ c++11 memory-management
1个回答
0
投票

C ++ 11中没有现成的功能可用于内存池。但是您可以使用Boost.Pool达到此目的。从Boost.Pool文档:

我应该何时使用泳池?

池通常在小对象有很多分配和释放的情况下使用。另一个共同点 用法是上面的情况,其中许多对象可能会掉出 记忆。 通常,当您需要更有效的方式执行异常内存控制时,请使用池。

© www.soinside.com 2019 - 2024. All rights reserved.