C++ C++;类及其派生类的内存池

C++ C++;类及其派生类的内存池,c++,memory,memory-management,C++,Memory,Memory Management,是否有一种通用的算法或实现,可以在类a及其派生类上使用内存池? 创建一个只在O(1)中为特定的a类工作的内存池是相当容易的。例如:分配一大块数据,即10*sizeof(a),然后在每次需要分配时,都给出一个大小为sizeof(a)的块 是否有这样一个简单的实现,当我们也可以考虑A的派生类,它具有更大的大小? 谢谢,这取决于你对简单的定义。正如Jack所说,您可以使用最大派生类的大小作为内存池数组的元素大小。这绝对是一个简单的实现 如果某些类型的大小为最大类型的一半或更小,则可以修改实现以允许第二

是否有一种通用的算法或实现,可以在
类a
及其派生类上使用内存池? 创建一个只在O(1)中为特定的a类工作的内存池是相当容易的。例如:分配一大块数据,即
10*sizeof(a)
,然后在每次需要分配时,都给出一个大小为
sizeof(a)
的块

是否有这样一个简单的实现,当我们也可以考虑A的派生类,它具有更大的大小?


谢谢,这取决于你对简单的定义。正如Jack所说,您可以使用最大派生类的大小作为内存池数组的元素大小。这绝对是一个简单的实现


如果某些类型的大小为最大类型的一半或更小,则可以修改实现以允许第二个实例占用兼容实例占用的插槽。如果适用,也可以扩展到四分之一大小的类型。

为什么需要具体的内存池?你不能只存储指针,让堆为你工作吗?这只是一个理论问题,需要在操作符new和操作符delete上进行实践……我能想到的唯一方法是不产生大的管理问题(内存块中的孔和任何东西)使用层次结构树中最大类的大小作为步长。如果类不是根本不同的话,你不会浪费太多的空间。有一个C++规则,用来让非叶类抽象。如果你遵循这条规则,你的情况就永远不会出现在第一位。