基于节点的容器的最佳分配器?

时间:2012-05-02 16:55:24

标签: c++ boost stl

基于节点的容器(如list,map和multi_map)的最佳分配器是什么? 我有一个boost::unordered_map<std::array<char, 32>, int>,有400万个条目。应避免400万个单独的分配(性能)。

理想情况下,分配器将分配多个(非常)大块并将它们划分为每个节点开销为0的节点。应跟踪空闲节点,但在整个池被破坏或重置之前不需要释放块。 该池不应该是线程安全的(性能)。

我可以尝试自己编写,但我不喜欢重新发明轮子。事先不知道节点方似乎也有问题。

Boost有Pool,但它似乎只提供单例使用。

1 个答案:

答案 0 :(得分:1)

你可以适应/包裹Loki small object allocator。它适用于相同尺寸的小物体。 另一种选择是使用Boost.Pool。它支持面向对象(非单例)用法,但您必须将其包装到boost::unordered_map支持的分配器对象。