有没有人知道STL实现允许在使用之前将动态分配器传递给容器的实例.
方案是我们有一个通用内存分配器来管理许多内存池,并且对于我们想要从不同内存池分配每个实例的stl :: vector的每个实例.
标准STL实现的问题在于您只能在类型基础上定义内存池,即int类型的所有向量都将从同一个池中分配.
我已经将我们的默认stl :: allocator换成了一个有状态的那个,即我们想要分配这个实例的池,但这对于stl :: list来说效果不好,它在默认的ctor中分配东西.
由于与我们的库相关的原因,我们在ctor中没有所有对象的有效池,因此我们想在用户可以使用stl容器之前调用'set memory pool'函数.
有没有人遇到过支持这种事情的实现?
类型化分配器可以使用下面的通用分配器来执行分配。
分配器需要支持这些功能:
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 来实现这一点)。
| 归档时间: |
|
| 查看次数: |
1357 次 |
| 最近记录: |