如果清除了 std::map 是否确保内存被解除分配



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

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

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

std::map具有clear功能,但没有shrink_to_fitclear后存储地图所需的内存会发生什么变化?

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

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

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

如果清除了 std::map 是否确保内存被释放

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

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

最新更新