我想以std::allocator
派生的类的形式使用一些符合C ++标准的内存管理,但能够分配内存块并释放&将它们放在较小的部分中。我只找到了boost :: pool,但是在上面的意义上这不符合标准。有什么更有用的,或者我自己编码吗?
(请注意,std::allocator
通常无法分配许多小对象,即使用std::list
时。)
编辑澄清。
说,我想使用许多小对象的std::list
,然后std::allocator
的实现使用::new
分配每个对象会导致运行时的大量开销(但我认为还有内存) )。分配大块对象并逐个分发它们会更有效率。为此,我需要一个std
兼容的分配器(不需要从std::allocator
派生,但必须实现相同的概念),可以与任何std
库一起使用容器并提供所需的内存管理,理想情况下允许我告诉它我可能单独分配多少个对象。
答案 0 :(得分:1)
GCC提供了一些extension allocators作为std::allocator
的替代方案。
你还没有真正说出你的要求是什么,所以不可能说它们中的任何一个是否适合你。
编辑以下OP的编辑:
说,我想使用许多小对象的
std::list
,然后std::allocator
的实现使用::new
分配每个对象会导致运行时的大量开销(但我认为还有内存) )。
为什么还有记忆?无论内存来自std::list
还是自定义分配器,每个new
节点中的附加指针的开销都将存在。你是说堆的记账是为了追踪所有的小型涂层吗?
分配大块对象并逐个分发它们会更有效率。
你有测量吗?
如果您不希望分配大量单独节点的开销,您确定std::list
是正确的容器吗?那么vector
或deque
呢?
boost::stable_vector
仍然是基于节点的,但每个节点的内存开销低于std::list
。
boost::flat_map<int, T>
不是基于节点的,可以代替std::list<T>
分配器很棘手,并不总是(真实或感知)问题的最佳答案。