基于浅树的数据结构的内存分配器,用于频繁分配和解除分配



我有一个基于二叉树的数据结构,可以在O(log N)中执行所有操作。它通过newdelete分配/解除分配内存。在我的典型用法中,数据结构运行了 40 分钟,并分配/取消分配小块树节点五亿次。此数据结构的总体内存占用量较低,因为取消分配很快就会发生。这已被确定为性能瓶颈。

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

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

C++11 中没有用于内存池的现成功能。但是你可以使用Boost.Pool来达到这个目标。来自 Boost.Pool 文档:

我什么时候应该使用池?

池通常在有大量小对象的分配和取消分配时使用。另一个常见点 用法是上述情况,其中许多对象可能会被丢弃 记忆。 通常,当您需要更有效的方式来执行异常内存控制时,请使用池。

使用 C++17 std::p mr::unsynchronized_pool_resource 或同步版本。

最新更新