【问题标题】:Clarification on the "object pool" pattern?澄清“对象池”模式?
【发布时间】:2013-03-28 13:59:57
【问题描述】:

我的印象是object pool 是一种设计模式,用于管理一组预先分配的对象,客户端可以请求并返回其中一个对象。但是,似乎boost.poolobject_pool 类更多地与较低级别的内存管理有关,而不是对象管理。为什么他们用这个名字,而不是像memory_pool这样的名字?我是不是误以为 boost 的对象池真的是一个内存池方案?或者它们本质上是一样的?另外,为什么没有更高级别的对象池模式的标准实现?

【问题讨论】:

  • 你在想slab allocator之类的东西吗?那是一种保持一些常见对象属性初始化的模式,以便在池中部分构造对象?我认为很难在 C++ 中对 部分 构造的对象进行建模。他们将如何完成?一个有趣的问题。
  • 您是否将分配与构造混淆了?
  • 我提供了一个答案,我相信可以解决我的困惑,但如果听起来我对 boost.pool 实现的解释是错误的,请随时发表评论。
  • 嗨,谢谢这个问题。我也有同样的问题。我需要一个“对象池”,以便我可以重用对象。 boost 在这个方向上提供了什么吗?或者使用boost::pool 比简单的手工制作的“对象池”有什么优势,它只是重用对象?

标签: c++ objectpool boost-pool


【解决方案1】:

在更深入地阅读了boost.pool 文档之后,我想我理解了我的困惑。我习惯于将对象池实现为一个分配和管理一组 direct 对象的类。考虑一下,

template<class T>
class object_pool {
private:
  std::list<T*> m_reserved; // holds onto any objects that have been allocated
public
  T *acquire() { /* grabs from reserved list */ }
};

然而,boost.pool 似乎实现了不同的对象池概念,其用途与上述建议的用途完全不同。 boost.pool 分配和管理所需对象的底层内存,大概是为了通过它所描述的Simple Segregated Storage 来提高堆性能。它实际上遵循对象池模式的this concept。关于这两种模式的区别的解释可以在我的subsequent question的回答中找到。

猜你喜欢
  • 1970-01-01
  • 2011-05-07
  • 2011-05-21
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多