发现C++程序中未释放的内存空间
本篇先后介绍在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里的指引来就行,有如下三步
- ./configure
- make
- 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++程序中未释放的内存空间的更多相关文章
- Silverlight 应用程序中未处理的错误
Silverlight 开发中遇到个错误: SCRIPT5022: Silverlight 应用程序中未处理的错误 代码: 2108 类别: InitializeError 消息: 无法下载初始屏幕或 ...
- C语言中计算变量占用内存空间
C语言中计算变量占用内存空间 在C语言中通常用[sizeof]运算符计算变量占内存空间,如下面的例子:
- 父类是在子类创建对象时候 在子类中创建一个super内存空间
父类是在子类创建对象时候 在子类中创建一个super内存空间
- free - 显示系统中已用和未用的内存空间总和.
总览 (SYNOPSIS) free [-b | -k | -m] [-o] [-s delay ] [-t] [-V] 描述 (DESCRIPTION) free 显示 系统中 已用和未用的 物理内 ...
- C语言中free函数是如何确定要释放多少内存空间的
本文链接:http://www.cnblogs.com/xxNote/p/4009359.html 今天看书的时候看到free函数释放动态申请的内存时只需要把内存块的首地址传过去就行了,显然仅仅依靠首 ...
- windows 32位系统中进程最大可用内存空间为3GB (转)
http://msdn.microsoft.com/zh-cn/library/ms189334.aspx 进程地址空间 所有 32 位应用程序都有 4 GB 的进程地址空间(32 位地址最多可以映射 ...
- python与C交互中传入与读取内存空间
使用用python调用c代码中,从外部传入一个固定大小的内存空间,这段内存需要是可写的 首先看下c中的函数 typedef struct ModelData { unsigned int model_ ...
- 获取程序中无需释放的ViewController
AppDelegate.h @property (strong, nonatomic) UIViewController *viewController; 在需要用的地方 #define appDel ...
- (转)silverlight应用程序中未处理的错误代码:2104 类别:InitializeError
解决方案:第一步:默认网站--属性-----http头 第二步:点击mime类型: 第三步:点击新建: 第四步:输入扩展名以及类型: (1) 扩展名:.xaml MIME类型:applicat ...
- 应用 Valgrind 发现 Linux 程序的内存问题
如何定位应用程序开发中的内存问题,一直是 inux 应用程序开发中的瓶颈所在.有一款非常优秀的 linux 下开源的内存问题检测工具:valgrind,能够极大的帮助你解决上述问题.掌握 valgri ...
随机推荐
- [后端-Python]-项目练习集
1 1. 2 ''' 3 knowledge_point: 4 1.练习if...else: 5 2.练习while; 6 3.练习列表的切片取值: 7 8 requirements: 9 购物车: ...
- grafana二次开发环境配置(windows10)
安装说明: 由于在windows环境安装grafana,第一次安装的是8.2.2版本,后端编译时一直报错,故安装了8.1.7 该错误在 grafana 的源码问题中可以找到,但针对 windows 暂 ...
- TensorFlow中的Variable 变量
简单运用 这节课我们学习如何在 Tensorflow 中使用 Variable . 在 Tensorflow 中,定义了某字符串是变量,它才是变量,这一点是与 Python 所不同的. 定义语法: s ...
- 安装centos,ubuntu系统
安装centos系统 1.首先进入VMware,新建虚拟机,选择典型,然后下一步 2.稍后安装系统,下一步 3.因为此次安装的是centos7.9系统,因此版本选择7 64位,下一步 4.选择虚拟机的 ...
- Mac系统中安装Nginx
一.前言 本文介绍一下,如何在Mac系统中安装Nginx,把详细过程记录下来,方便以后查看,也方便大家学习. 二.正文 1.安装 Homebrew homebrew是什么?它是Mac中的一款软件包 ...
- Nextjs Contentful GraphQL Vercel Edges
配置contentful 1. 创建免费账号 2. 根据提示进行操作, Content Model - 创建页面属性模板 (personalWebsite) content entry - 根据属 ...
- 083_SFDC Limit(二) 及良好的开发习惯
关于常见开发中遇到的limit,应如何处理:https://developer.salesforce.com/page/Apex_Code_Best_Practices 链接内容很好,就不一一做解释 ...
- 【GROMACS】分子动力学模拟①——环境搭建
系统环境 Win11 22H2 企业版 开启虚拟化.window subsystem for liunx等虚拟机相关的功能 应用商店中安装WSL2 安装步骤 打开Ubuntu,输入sudo apt f ...
- 传统编码方式转 gRPC 注意事项
# 赋值编码: 1.pbBuilder 设置值时不能为 null 2.pb 定义的类是不可变类,赋值时需要使用 Builder 模式,且每次 builder 都会 new 一个新对象,所以赋值时需要特 ...
- uniapp离线打包安卓未配置appkey或配置错误
按照这4步检查都没问题 1.查看签名文件是否配置到了主APP的build.gradle. signingConfigs { config { keyAlias 'newPt' keyPassword ...