map erase 内存释放问题

2023-11-10

资料出处:http://www.cnblogs.com/goodness/archive/2012/05/16/2503832.html

 研究了下c++中map的内存占用情况。很多人说map中的erase以及clear不能释放内存,这几天实验了下,这个说法是不确切的,较为准确的说法应该是,map中的erase以及clear,不能,“马上”释放内存。map有自己的机制回收内存,用erase以及clear之后,如果没有特殊需求,可以认为那部分内存已经释放了。map不会马上释放删掉内容的内存,而是会对内存进行“预留”,如果确实很长时间用不到预留的内存,才会释放。
 做了这样几个实验,P1不停的填充map,监控程序内存占用情况。自然内存是不断上升的。P2则是向map中填充200M数据后,一个一个进行erase到0个,然后再重新填充。可以看到,填充过程内存连续增加,可是erase过程,内存没有连续减少。而是一段时间之后,忽然减少的2M左右。重新填充,内存再增加至之前的200M。P3的过程是,先向Map中填充200M数据,然后erase掉偶数index的数据(即删掉100M),然后再填充200M,如此往复。发现内存占用开始不断增加,到删除100M数据时,内存不变。第二轮填充开始,内存仍不变,直到填充100M以上后,内存开始继续增加。
由以上实验可知,map有较为科学的内存回收机制。可以认为clear以及erase的空间,map会在合适的时间回收。

C++:删除map元素,当value值为指针时,如何释放内存。
出自 http://blog.csdn.net/ttguess/article/details/7860768
class A { ··· ···}
map< string, A* > stoaMap;

1)通过迭代器遍历删除

map< string,A* >::iterator iter = stoaMap.begin();

while(iter != stoaMap.end()) //#1

{

//注意要先释放内存,在删除map元素,顺序不能颠倒。

//释放内存

delete iter->second;

iter->second = NULL;

//删除map元素

stoaMap.erase(iter++); //#1

}

注:#1是为了防止迭代器失效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

map erase 内存释放问题 的相关文章

随机推荐

  • 【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识

    前面几篇文章采用的案例的方法进行介绍的 这篇文章主要介绍Python常用的扩展包 同时结合数据挖掘相关知识介绍该包具体的用法 主要介绍Numpy Pandas和Matplotlib三个包 目录 一 Python常用扩展包 二 Numpy科学
  • RabbitMQ中重试机制的坑

    当我们消息消费失败的时候 可以进行重试 虽然SpringAMQP集成了retry机制 但是发现使用过程有点坑 等会细说 重试机制使用场景 1 如果是业务代码 比如空指针之类的异常那重试机制其实没什么用 2 如果是调用第三方系统 网络抖动之类
  • 二叉树遍历的非递归算法

    非递归的算法主要采用的是循环出栈入栈来实现对二叉树的遍历 下面是过程分析 以下列二叉树为例 图片来自懒猫老师 数据结构 课程相关内容 1 前序遍历 前序遍历的顺序为 根结点 gt 左子树 gt 右子树 基本过程 1 访问根结点 将根结点入栈
  • apply函数族简介

    apply函数 沿着数组的某一维度处理数据 例如 将函数用于矩阵的行或列 虽然与for while循环的效率相似 但只用一句话就可以完成 参数 apply 数组 维度 函数 函数名 x lt matrix 1 16 4 4 apply x
  • Java 基础 —— NIO 学习

    一 NIO 简介 java nio 全称 java non blocking IO 是指 JDK 提供的新 API 从 JDK1 4 开始 Java 提供了一系列改进的输入 输出的新特性 被统称为 NIO 即 New IO 新增了许多用于处
  • 95-38-040-Buffer-AbstractReferenceCountedByteBuf引用计数

    文章目录 1 总述 1 1 拓扑图 1 2 概述 2 私有变量 3 增加引用计数 4 减少引用计数 1 总述 1 1 拓扑图 1 2 概述 从名字可以推断 该抽象类实现引用计数相关的功能 引用计数的功能简单理解就是 x
  • 西安高新第三中学2021年高考成绩查询,西安高新三中的实力怎么样?让我们来看看这些数据……...

    有家长问 西安高新三中的升学率 到底是多少 可以考上五大又有多少个 先看参加中考的初中部 1 重点班和研讨班55 普通班35 别指望着公办初中的升学率超过60 数据很真实 残酷 2 去年高新三中定向生名额62个 其中高新一中给了5个 铁一中
  • python软件下载3版本-Python 3.7.2和3.6.8版本发布下载,附更新说明

    Python 3 7 2和Python 3 6 8版本发布了 支持Windows Linux UNIX Mac OS平台 已经提供Python 3 7 2 tgz和Python 3 6 8 tgz包下载 说明 Python 3 7 2属于P
  • 如何在右键新建中添加新建xmind文件

    如何在右键新建中添加新建xmind文件 导语 现在总是要写思维导图 所以希望新建的时候更方便快捷一点 不用打开软件新建才能选择新建文件之后文件的位置 于是就开始想能不能想Word文档一样直接鼠标右键新建处就可以有新建Word文档那样 方便的
  • KMP算法-时间复杂度分析

    KMP算法 假设m为模式串strM的长度 n为待匹配的字符串strN的长度 KMP的基本过程 求模式串strM的next数组 遍历比较待匹配的字符串strN 过程 遍历strN 遍历时出现strM j 的回跳 比较strN i strM j
  • 闲聊ROOT权限——ROOT权限的前世今生

    最近工作一直很忙 竟然慢慢地疏远了CSDN的博客 然而在工作中遇到问题 又会被多次的引导至CSDN 故笔者抽空也将自己学习的成果与大家分享在这里 希望能帮助到需要帮助的人 本文将从几个方面 由浅至深地讲述ROOT到底是什么东西 一 ROOT
  • python2.x脚本转换为python3.x脚本方法详细步骤与实践分享

    1 安装python3 x 2 设置python环境变更 将C Python36 Scripts C Python36 追加加到系统变更PATH中 注 C Python36为安装路径 若不一致请更换成你的安装路径 3 找到2to3 py脚本
  • java环境能加快matlab运行吗,花了一天,解决java调用matlab

    鉴于labview做不了web labview强项在于硬件仪器控制 可能也可以做web 还不会 虽然有web发布工具 但是基于远程前面板 最后效果都呈现在前面板上 涉及了跳转页面 matlab绘图等只在服务器端上显示的问题 因此 打算用ja
  • 支付通道简述

    1 苹果内购流程图 官方文档 简体中文文档 Apple Developer 苹果内购没有通知 需要前端调用后端接口 通知后端支付成功 订单号由前端提供 后端通过订单号处理业务逻辑 返回值示例 苹果服务器验证后的返回值文档地址 respons
  • js写一个简单的计算机,js实现一个简易计算器

    本文实例为大家分享了JS实现简易计算器的具体代码 供大家参考 具体内容如下14th test 这是一个标题 以下是一个简易计算器 第一个数 第二个数 var res 保存计算结果 function add var first documen
  • linux动态链接库的编译和使用

    文章目录 1 动态链接库的编译 2 可执行程序的编译 3 运行可执行程序 4 设置动态库查询目录 方法一 更改环境变量LD LIBRARY PATH 方法二 通过 Wl rpath编译链接选项指定 方法三 修改配置文件 etc ld so
  • 互联网企业使用云计算,有什么优势?

    现如今 上云已经成为企业发展过程中不可逆转的历史潮流趋势 如今 越来越多的企业开始采用云计算 因为它会给企业带来很多惊人的好处 云计算不仅可以降低企业成本 提高灵活性和弹性 还能优化资源的利用 从而提企业高竞争力 自动软件更新 许多公司及其
  • 2021.08.28-MMsegmentation0.16.0+Cuda10.1+Ubuntu16.04+Pytorch1.8环境安装

    个人在目标检测方向的学习比较深入 但在深度学习的图像处理中 语义分割也是一个很重要的方向 所以也想一探究竟 熟悉一下基本流程和工作原理 现打算在LINUX系统Ubuntu16 04上安装mmsegmentation框架 因为之前主要使用mm
  • 百度地图JavaScript API开发GIS服务

    百度地图JavaScript API是由JavaScript语言编写的应用程序接口 支持HTTP和HTTPS 免费对外开放 在使用前 需先申请密钥 ak 才可使用 主要分为两种类型的版本 JavaScript API GL 使用了WebGL
  • map erase 内存释放问题

    资料出处 http www cnblogs com goodness archive 2012 05 16 2503832 html 研究了下c 中map的内存占用情况 很多人说map中的erase以及clear不能释放内存 这几天实验了下