【问题标题】:C++ memory pool for a class and its derived classes类及其派生类的 C++ 内存池
【发布时间】:2012-11-15 20:42:26
【问题描述】:

是否有一个通用的算法或实现来拥有一个同时适用于class A 及其派生类的内存池? 创建一个仅适用于特定类 A 的 O(1) 内存池是相当容易的。例如:分配一大块数据,即10*sizeof(A),然后在每次需要分配时分配大小为sizeof(A)的1à块。

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

【问题讨论】:

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

标签: c++ memory memory-management


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多