代码之家  ›  专栏  ›  技术社区  ›  schorsch312

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

  •  3
  • schorsch312  · 技术社区  · 6 年前

    如果A std::vector vec 被清除 vec.clear() 分配的内存不能立即解除分配。这个 size 向量的值将为零,但 capacity 将/可以不变。

    这是一种非常有益的行为,因为可以清除一个大向量并为其分配新值,而不需要昂贵的内存去/分配。同样,记忆的碎片也会减少。

    我们可以用 vec.shrink_to_fit() shrink_to_fit .

    std::map 有一个 clear 功能,但不是 shrink_to_fit . 存储映射所需的内存在 清楚的 ?

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

    1 回复  |  直到 6 年前
        1
  •  4
  •   eerorika    6 年前

    你可以用vec.shrink_to_fit()将其强制化。

    事实上, shrink_to_fit 执行 释放内存。它只是允许它。允许实现不解除分配。

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

    不可以。只有在标准容器被销毁时,才能保证释放它们的内存。

    地图没有矢量的容量概念,所以它不需要缩小以适应。清除后的映射与清除+收缩到匹配后的向量处于相同的情况:它不需要分配任何内存…但也不禁止分配。