首页 > 解决方案 > 如果 std::map 被清除,则确保内存被释放

问题描述

如果 astd::vector vec被分配的内存清除,vec.clear()则不能立即释放。向量的size将为零,但capacity意志/可以保持不变。

这是一种非常有益的行为,因为可以清除一个大向量并为其分配新值,而不需要昂贵的内存释放/分配。此外,内存将减少碎片整理。

可以使用vec.shrink_to_fit() shrink_to_fit强制执行。

std::map有一个clear功能,但没有shrink_to_fit。在 a 之后存储地图所需的内存会发生什么变化clear

cppreference.com 声明map.clear()从容器中删除所有元素。在此调用之后,size() 返回零。

标签: c++memory-managementstdvectorstdmap

解决方案


可以使用 vec.shrink_to_fit() shrink_to_fit 来强制执行。

实际上,shrink_to_fit并不强制释放内存。它只是允许它。允许实现不解除分配。

如果 std::map 被清除,则确保内存被释放

不。唯一保证标准容器释放内存的情况是它们被销毁时。

Map没有vector所具有的容量概念,所以不需要shrink_to_fit。清除后的地图与清除后的矢量处于相同的情况 + shrink_to_fit:它不需要分配任何内存......但也不禁止分配它。


推荐阅读