c++ - 如果 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() 返回零。
解决方案
可以使用 vec.shrink_to_fit() shrink_to_fit 来强制执行。
实际上,shrink_to_fit
并不强制释放内存。它只是允许它。允许实现不解除分配。
如果 std::map 被清除,则确保内存被释放
不。唯一保证标准容器释放内存的情况是它们被销毁时。
Map没有vector所具有的容量概念,所以不需要shrink_to_fit。清除后的地图与清除后的矢量处于相同的情况 + shrink_to_fit:它不需要分配任何内存......但也不禁止分配它。