use*_*931 7 c++ memory unordered-map std language-lawyer
如果我将 std::unordered_map::reserve 与参数 n 一起使用,只要插入到映射中的元素少于 n 个,插入到映射中是否能保证不会导致堆分配?
小智 5
标准中似乎没有这样的保证。
此外,如果您查看一个实现 - 引用 gcc 附带的标头 (<bits/hashtable.h>):
就标准容器而言,哈希表类似于以下内容的聚合:
std::forward_list<_Node>包含元素std::vector<std::forward_list<_Node>::iterator>代表桶
Reserve 确保您拥有适当数量的存储桶,并适当调整该向量的大小。因此至少不会再为新的存储桶分配更多的资源。但存储桶是内部链接列表,向其中插入元素必须分配一个新的 _Node。
总的来说:不,即使在保留适当的容量之后,无序映射也可能(并且在 gcc 的情况下)分配堆内存。
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |