4

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

4

1 回答 1

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分配和管理所需对象的底层内存,大概是为了通过它所描述的简单隔离存储来提高堆性能。它实际上并没有遵循对象池模式的这个概念。关于这两种模式之间区别的解释可以在我后续问题的答案中找到。

于 2013-04-06T05:02:01.233 回答