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

C++ 用于基于轻型树的数据结构的内存分配器,用于频繁分配和解除分配,c++,c++11,memory-management,C++,C++11,Memory Management,我有一个基于二叉树的数据结构,它执行O(logn)中的所有操作。它通过new和delete分配/释放内存。在我的典型用法中,数据结构在40分钟内运行,并且分配/取消分配小块树节点5亿次。此数据结构的总体内存占用率较低,因为很快就会发生取消分配。这已被确定为性能瓶颈 我正在考虑重载运算符new和delete,或者修改现有代码,以便能够使用分配器并为此创建自定义分配器。我正在考虑预先分配连续的大量内存,并重新使用其中的内存块。C++11标准是否有这样一个基于池的内存分配器 什么内存分配/取消分配策略

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

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


什么内存分配/取消分配策略最适合这种使用?

C++11中没有现成的内存池功能。但你可以利用这个目标。从文件中:

我应该什么时候使用游泳池?

池通常用于小对象的大量分配和解除分配。另一个共同点 使用是上述情况,其中许多对象可能会从 记忆。 一般来说,当您需要一种更有效的方法来进行异常内存控制时,可以使用池


使用C++17或同步版本。

是时候继续使用C++17的pmr了。为此使用boost库似乎有些过分。在我的例子中,我已经准备好自己实现它的一个天真的、人为的版本了。@MukulGupta你所说的过度杀戮是什么意思?在我的例子中,包括一个成熟的库有组织开销。此外,我希望能够了解此类池分配器的实现细节。