对std :: unordered_map哈希值和值使用不同的分配器

时间:2017-11-18 10:26:22

标签: c++ stl

在我正在研究的程序中,在std::unordered_map的默认分配器内存中花费了大量时间。地图经常添加和删除数据,每次插入时发生的分配限制了程序的性能。 (性能特别糟糕,因为计算机上的所有64个核心都在分配/解除分配相同类型的节点,并且似乎存在争用某些内部锁定。)

为了提高性能和降低分配器压力,我正在尝试使用池分配器(boost::object_pool)来重用内存。此外,如果密钥/值存储在本地池中,我预计程序可能会从数据局部性改进中获得一些性能提升。

std::unordered_map似乎为哈希分配内存,并分别为键值对对象分配(如std::pair<const Key, Value>)。但是,只有一个allocator模板参数,这似乎设置了用于两个对象的分配器。如何为这两件事使用不同的分配器?

在某些情况下,我看到std::scoped_allocator_adaptor建议,但我最好能说明这实际上是在嵌套容器中指定不同的分配器,而不是在同一个容器中。

0 个答案:

没有答案