使用自定义分配器使std :: list缓存友好吗?

时间:2017-03-29 21:15:45

标签: c++ allocator

在我的日常工作中,团队的高级成员总是建议我列表不是缓存友好的,所以我应该vector。我知道list不是连续的,因此内存分配分散在整个内存中。

但是,我经常需要list(或map)的功能。所以我想知道我是否可以编写自己的分配器,它下面是vector。每当我push_back时,我自己的分配器将从每个分配的vector分配一个新项目。

当我旅行list / map时,会保留缓存位置。

这对你们任何人都有意义吗?

1 个答案:

答案 0 :(得分:1)

std::list和std :: set(我相信你需要设置为list的替代,而不是map)两者都会在内部使用allocator。 您可以预先分配内存块并使用它来创建对象和容器。如果你谷歌,你会发现几个。在这种情况下,如果“分散在整个内存中”,您的对象将分散在您的内存块周围。如果块适合缓存,您将获得一些改进。但它不能完全解决你的问题。

从问题描述中,您确实需要 deque 。 Deque实现为数组列表。它是矢量和列表之间的折衷。它对于迭代是缓存友好的,并且在插入时比数组更快。

因此您可以选择自定义分配器或双端队列,具体取决于您的收藏大小。

image

相关问题