繁体   English   中英

清空后减少std :: unordered_map内存占用

[英]Reducing std::unordered_map memory footprint after emptying it

假设我有一个std::unordered_map对象,我添加了一些元素然后删除它们。 除了构造一个新对象来替换旧对象之外,有没有办法强制减少map对象的内存占用,类似于std::vector::shrink_to_fit()

由于节点是根据需要分配和删除的,因此可以减少的唯一内存是存储桶列表使用的内存。 这可以通过在unordered_map上调用rehash(0)来完成(参数是要使用的最小桶数;实际数量可以根据地图中存储的数量和地图的max_load_factor()来更大) 。 这可能是一项耗时的操作,具体取决于同一个存储桶中有多少节点。

创建新地图的替代方案将会变慢,因为存储在新地图中的内容将需要为其分配存储空间,在所有插入期间可能会发生多次重新定位(取决于地图的大小),以及旧地图使用的节点地图将需要被释放。 可以通过调用extract从旧映射中删除节点来重用节点,并insert以将其添加到新映射中,但仍可能在新映射中进行重新划分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM