标签: c++ allocator
在我的日常工作中,团队的高级成员总是建议我列表不是缓存友好的,所以我应该vector。我知道list不是连续的,因此内存分配分散在整个内存中。
vector
list
但是,我经常需要list(或map)的功能。所以我想知道我是否可以编写自己的分配器,它下面是vector。每当我push_back时,我自己的分配器将从每个分配的vector分配一个新项目。
map
push_back
当我旅行list / map时,会保留缓存位置。
这对你们任何人都有意义吗?
答案 0 :(得分:1)
std::list和std :: set(我相信你需要设置为list的替代,而不是map)两者都会在内部使用allocator。 您可以预先分配内存块并使用它来创建对象和容器。如果你谷歌,你会发现几个。在这种情况下,如果“分散在整个内存中”,您的对象将分散在您的内存块周围。如果块适合缓存,您将获得一些改进。但它不能完全解决你的问题。
从问题描述中,您确实需要 deque 。 Deque实现为数组列表。它是矢量和列表之间的折衷。它对于迭代是缓存友好的,并且在插入时比数组更快。
因此您可以选择自定义分配器或双端队列,具体取决于您的收藏大小。