我有一个基于二叉树的数据结构,该结构在O(log N)
中进行所有操作。它通过new
和delete
分配/取消分配内存。在我的典型用法中,该数据结构使用了40分钟,并分配/取消分配了小块树节点十亿次。该数据结构的总内存占用量很低,因为取消分配的发生足够快。这已被确定为性能瓶颈。
我正在考虑重载运算符new
和delete
或修改我现有的代码,以便能够使用分配器并为此目的创建自定义分配器。我正在考虑预先分配连续的大量内存,并从中重新使用内存块。 C ++ 11标准是否具有基于池的内存分配器?
哪种内存分配/取消分配策略最适合这种用法?
C ++ 11中没有现成的功能可用于内存池。但是您可以使用Boost.Pool达到此目的。从Boost.Pool文档:
我应该何时使用泳池?
池通常在小对象有很多分配和释放的情况下使用。另一个共同点 用法是上面的情况,其中许多对象可能会掉出 记忆。 通常,当您需要更有效的方式执行异常内存控制时,请使用池。