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

标签 c++ boost stl

什么是基于节点的容器(如 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/

相关文章:

c++ - 异步记录器真的有助于提高性能吗?

c++ - std::future 是否支持多态?

c++ - 是否可以使用 boost::program_options 来捕获不带破折号的参数?

algorithm - 试图提高数组中此搜索的效率

c++ - 为什么 std::map 重载运算符 < 不使用比较

c++ - 在 QML Canvas 和 C++ 之间来回切换

c++ - 当流关闭时,boost::asio::async_read 的 ReadHandler 应该返回什么 error_code?

c++ - 在 lambda 函数中捕获 boost::asio::thread_pool

C++ 异常处理指南

c++ - 将单个参数传递给需要迭代器范围的函数