If a std::vector vec
被清除vec.clear()
分配的内存不得立即释放。这size
向量的值将为零,但capacity
将/可以不变。
这是一种非常有益的行为,因为可以清除一个大向量并为其分配新值,而不需要昂贵的内存解除/分配。内存碎片整理也会减少。
人们可以强制执行这一点vec.shrink_to_fit()
缩小以适合 https://en.cppreference.com/w/cpp/container/vector/shrink_to_fit.
std::map
has a clear
有功能,但是没有shrink_to_fit
。存储地图所需的内存会发生什么变化clear
?
cppreference.com 指出地图.clear() https://en.cppreference.com/w/cpp/container/map/clear删除容器中的所有元素。调用此函数后,size() 返回零。
可以使用 vec.shrink_to_fit()shrink_to_fit 强制执行这一点。
实际上,shrink_to_fit
不enforce内存的重新分配。它只是允许它。允许实现不释放。
如果 std::map 被清除,是否确保内存被释放
不会。保证标准容器释放内存的唯一情况是它们被销毁时。
Map没有vector所具有的容量概念,因此它不需要shrink_to_fit。清除后的映射与清除+shrink_to_fit后的向量处于相同的情况:它不需要分配任何内存......但也不禁止分配它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)