澄清"对象池"模式?

jwa*_*alk 4 c++ objectpool boost-pool

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

jwa*_*alk 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 */ }
};
Run Code Online (Sandbox Code Playgroud)

但是,它似乎boost.pool实现了一个不同的对象池概念,一个用于与上面建议的完全不同的目的. boost.pool分配和管理所需对象的底层内存,可能是因为它可以通过它描述为简单隔离存储的方式来提高堆性能.这其实也没有遵循这个概念的对象池模式.关于这两种模式之间区别的解释可以在我后续问题的答案中找到.