澄清“对象池”模式?

时间:2013-04-06 01:28:54

标签: c++ objectpool boost-pool

我的印象是object pool是一种设计模式,用于管理客户端可以请求的一组预分配对象,并返回其中一个对象。但是,似乎boost.pool的{​​{1}}类与低级内存管理有关,而不是对象管理。他们为什么选择这个名字,而不是object_pool?我是否认为boost的对象池实际上是一个内存池方案?或者它们基本上是一回事?另外,为什么还没有更高级别的对象池模式的标准实现?

1 个答案:

答案 0 :(得分:5)

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

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的答案中找到。