[英]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.