使用基于动态/状态的分配器的STL实现?

use*_*168 6 c++ stl allocator

有没有人知道STL实现允许在使用之前将动态分配器传递给容器的实例.

方案是我们有一个通用内存分配器来管理许多内存池,并且对于我们想要从不同内存池分配每个实例的stl :: vector的每个实例.

标准STL实现的问题在于您只能在类型基础上定义内存池,即int类型的所有向量都将从同一个池中分配.

我已经将我们的默认stl :: allocator换成了一个有状态的那个,即我们想要分配这个实例的池,但这对于stl :: list来说效果不好,它在默认的ctor中分配东西.

由于与我们的库相关的原因,我们在ctor中没有所有对象的有效池,因此我们想在用户可以使用stl容器之前调用'set memory pool'函数.

有没有人遇到过支持这种事情的实现?

Cas*_*Cow 2

类型化分配器可以使用下面的通用分配器来执行分配。

分配器需要支持这些功能:

  pointer address ( reference x ) const;
  const_pointer address ( const_reference x ) const;
  pointer allocate (size_type n, allocator<void>::const_pointer hint=0);
  void deallocate (pointer p, size_type n);
  size_type max_size() const throw();
  void construct ( pointer p, const_reference val );
Run Code Online (Sandbox Code Playgroud)

假设您有一个仅分配内存和释放内存的机制,您可以使用它来实现上面的一些功能。

键入分配器的优点是,您知道您将创建许多大小完全相同的项目,因此可以创建适合您的“页面”。最大的问题可能是你被迫通过 allocate() 返回连续的缓冲区(实际上向量需要它们)。

http://www.cplusplus.com/reference/std/memory/allocator/

您的问题仍然有点不清楚为什么这还不够。您可以使用“一次”逻辑初始化内存池。(如果是多线程,您可以使用 boost::once 来实现这一点)。