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