什么是基于节点的容器(如 list、map 和 multi_map)的最佳分配器?
我有一个 boost::unordered_map<std::array<char, 32>, int>
有 400 万个条目。应避免 400 万次单独分配(为了性能)。
理想情况下,分配器会分配多个(非常)大的 block ,并将它们分成每个节点开销为 0 的节点。应跟踪空闲节点,但在整个池被销毁或重置之前不需要释放 block 。 该池不应是线程安全的(为了性能)。
我可以尝试自己编写,但我不想重新发明轮子。事先不知道节点端似乎也有问题。
Boost 有 Pool,但它似乎只提供单例使用。
最佳答案
您可以改编/包装 Loki small object allocator .它适用于相同大小的小物体。
另一种选择是使用 Boost.Pool .它支持面向对象(非单例)使用,但您必须将其包装到 boost::unordered_map
支持的分配器对象。
关于c++ - 基于节点的容器的最佳分配器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10418300/