本篇先后介绍在windows中使用visual studio定位未释放的内存、在linux中使用valgrind定位未释放的内存。


Windows+Visual Studio 2015 (企业版)

准备好测试程序后,点击“分析”-“性能探查器”

勾选“内存使用率”,点击“开始”

程序进入运行状态。点击“拍摄快照”,分析器会将当前的内存使用情况保存到一个快照里。

根据情况,创建多个快照,以便于查看相邻快照的内存变化情况。点击“停止”,出现如下所示界面。

红框处的表示相比上一次快照,内存的变化情况。点击该文字,可以进入详细情况查看页,可以看到增加(如果有的话)的字节是在哪被分配的。


Linux环境中

需要借助开源工具 valgrind 。经测试,该工具最新版(22 June 2020)在Redhat 6.4环境中可用。若要用得顺畅,可能需要一点英语能力。

该工具的最大优点是非侵入式的,即无需修改原测试程序就可以检测内存占用。但需要编译测试程序时的g++命令带上 -g 选项

下载页面网址:https://www.valgrind.org/downloads/current.html#current 。

懒人地址:https://sourceware.org/pub/valgrind/valgrind-3.16.1.tar.bz2

下载完成后,安装很简单,根据Readme里的指引来就行,有如下三步

  1. ./configure
  2. make
  3. make install

然后可以直接使用valgrind了。使用前检查是否真的安装成功:valgrind --leak-check=full ls -l

使用该工具的常用格式是:valgrind --tool=memcheck --leak-check=full [程序名] [程序运行参数]

可以通过 valgrind --help 查看帮助。

在程序运行过程中,valgrind会将内存使用不当的地方输出;当程序运行完成或中断后,valgrind会将可能有内存未释放的地方列出来。

为了防止valgrind的输出和程序的输出混在一起,可以给valgrind命令添加--log-file选项,将valgrind的输出定向到文件中,这样就可以直接在这个文件中查看日志使用情况了。

如:valgrind --tool=memcheck --leak-check=full --log-file=valgrind.log [程序名] [程序运行参数]

发现C++程序中未释放的内存空间的更多相关文章

  1. Silverlight 应用程序中未处理的错误

    Silverlight 开发中遇到个错误: SCRIPT5022: Silverlight 应用程序中未处理的错误 代码: 2108 类别: InitializeError 消息: 无法下载初始屏幕或 ...

  2. C语言中计算变量占用内存空间

    C语言中计算变量占用内存空间 在C语言中通常用[sizeof]运算符计算变量占内存空间,如下面的例子:

  3. 父类是在子类创建对象时候 在子类中创建一个super内存空间

    父类是在子类创建对象时候 在子类中创建一个super内存空间

  4. free - 显示系统中已用和未用的内存空间总和.

    总览 (SYNOPSIS) free [-b | -k | -m] [-o] [-s delay ] [-t] [-V] 描述 (DESCRIPTION) free 显示 系统中 已用和未用的 物理内 ...

  5. C语言中free函数是如何确定要释放多少内存空间的

    本文链接:http://www.cnblogs.com/xxNote/p/4009359.html 今天看书的时候看到free函数释放动态申请的内存时只需要把内存块的首地址传过去就行了,显然仅仅依靠首 ...

  6. windows 32位系统中进程最大可用内存空间为3GB (转)

    http://msdn.microsoft.com/zh-cn/library/ms189334.aspx 进程地址空间 所有 32 位应用程序都有 4 GB 的进程地址空间(32 位地址最多可以映射 ...

  7. python与C交互中传入与读取内存空间

    使用用python调用c代码中,从外部传入一个固定大小的内存空间,这段内存需要是可写的 首先看下c中的函数 typedef struct ModelData { unsigned int model_ ...

  8. 获取程序中无需释放的ViewController

    AppDelegate.h @property (strong, nonatomic) UIViewController *viewController; 在需要用的地方 #define appDel ...

  9. (转)silverlight应用程序中未处理的错误代码:2104 类别:InitializeError

        解决方案:第一步:默认网站--属性-----http头 第二步:点击mime类型: 第三步:点击新建: 第四步:输入扩展名以及类型: (1) 扩展名:.xaml MIME类型:applicat ...

  10. 应用 Valgrind 发现 Linux 程序的内存问题

    如何定位应用程序开发中的内存问题,一直是 inux 应用程序开发中的瓶颈所在.有一款非常优秀的 linux 下开源的内存问题检测工具:valgrind,能够极大的帮助你解决上述问题.掌握 valgri ...

随机推荐

  1. c++ class派生与多态

    目录 类继承和类派生 继承时名字遮蔽 基类和派生类的构造函数 构造函数调用顺序 基类和派生类的析构函数 多重继承 虚继承和虚基类 将派生类赋值给基类(向上转型) 将派生类指针赋值给基类指针. 将派生类 ...

  2. JS语句创建简单表格

    var line=3; var list=3; var table=document.createElement("table"); table.setAttribute(&quo ...

  3. Unity 使用IO流获取PNG/JPG/GIF/BMP的宽高【转】

    原文链接:https://blog.csdn.net/flj135792468/article/details/107963280?utm_medium=distribute.pc_relevant. ...

  4. 在sublime text 3中编译javascript

    1.整理步骤: 1).安装node.js: 2).配置js编译系统: 2.过程 1).先是按照网上的方法,在配置的时候输入如下内容: {"cmd": ["node&quo ...

  5. NTP网络时间服务器(时间同步服务器)产品介绍及技术研究分析

    NTP网络时间服务器(时间同步服务器)产品介绍及技术研究分析 目前,市场上的NTP网络时间服务器鱼龙混杂,厂家良莠不齐,对此选择一家有实力的厂家及性价比高的NTP网络时间服务器厂家显得尤其重要. NT ...

  6. 【GENERAL FRAMEWORK】总框架——持续更新

    引: 鉴于目前挖的坑较多,未防止某些即将长期更新的博文出现烂尾,特设此框架 1.蓝桥杯(完结)         1.[蓝桥杯单片机组]LED.蜂鸣器与继电器--138-573的外设操作         ...

  7. 公司官网百度搜素优化(www.curetech.cc)

    1.  解读" 百度搜素引擎网页质量白皮书 "  . 链接:https://pan.baidu.com/s/1fD7Cm93qsK01M0K1M1cIKw 提取码:9krx 2.  ...

  8. (二)用go实现二叉查找树

    本篇,我们用go简单的实现二叉查找树. 1.节点定义 type BSNode struct{ data int left, right, parent *BSNode } 2.前序遍历 func (p ...

  9. uniapp支付返回form

    在项目中,支付功能是一个常见的功能,调用支付宝时,后段给我们的是一个form的富文本内容 这时需要把form到页面渲染,方法如下: uni.request({ //仅为示例,并非真实接口地址. url ...

  10. 推荐优秀国产蓝牙芯片-HS6621CxC系列

    HS6621CxC是一个优化功耗真正芯片系统(SOC)解决方案,适用于蓝牙低功耗和私有的2.4GHz应用场景.它集成了一个高性能.小功率的射频收发器,具有蓝牙基带和丰富的外围IO扩展. HS6621C ...