Memwatch简介
Memwatch简介
在三种检测工具当中,设置最简单的算是memwatch,和dmalloc一样,它能检测未释放的内存、同一段内存被释放多次、位址存取错误及不当使用未分配之内存区域。请往http://www.linkdata.se/sourcecode.html下载最新版本的Memwatch。
安装及使用memwatch
很幸运地,memwatch根本是不需要安装的,因为它只是一组C程序代码,只要在你程序中加入memwatch.h,编译时加上-DMEMWATCH-DMW_STDIO及memwatch.c就能使用memwatch,例如:
gcc -DMEMWATCH -DMW_STDIO test.c memwatch.c -o testmemwatch输出結果
memwatch的输出文件名称为memwatch.log,而且在程序执行期间,所有错误提示都会显示在stdout上,如果memwatch未能写入以上文件,它会尝试写入memwatchNN.log,而NN介于01至99之间,若它仍未能写入memwatchNN.log,则会放弃写入文件。
我们引用第一篇(mtrace)中所使用过的有问题的代码:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <memwatch.h>
int main() {
char *hello; setenv("MALLOC_TRACE", "output", 1);
mtrace();
if ((hello = (char *) malloc(sizeof(char))) == NULL) {
perror("Cannot allocate memory.");
return -1;
} return 0;
}
然后在shell中输入以下编译指令:
gcc -DMEMWATCH -DMW_STDIO test.c memwatch.c -o test
memwatch.log的內容如下:
============= MEMWATCH 2.71 Copyright (C) 1992-1999 Johan Lindh ============= Started at Sat Jun 26 22:48:47 2004 Modes: __STDC__ 32-bit mwDWORD==(unsigned long)
mwROUNDALLOC==4 sizeof(mwData)==32 mwDataSize==32
Stopped at Sat Jun 26 22:48:47 2004 unfreed: <1> test.c(9), 1 bytes at 0x805108c {FE .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .} Memory usage statistics (global):
N)umber of allocations made: 1
L)argest memory usage : 1
T)otal of all alloc() calls: 1
U)nfreed bytes totals : 1
文件指出,在test.c被执行到第9行时所分配的内存仍未被释放,该段内存的大小为1 byte。
Memwatch使用注意
Memwatch的优点是无需特別配置,不需安装便能使用,但缺点是它会拖慢程序的运行速度,尤其是释放内存时它会作大量检查。但它比mtrace和dmalloc多了一项功能,就是能模拟系统内存不足的情況,使用者只需用mwLimit(longnum_of_byte)函数来限制程式的heap memory大小(以byte单位)。
最详细的使用说明(包括优点缺点,运行原理等)已在README中列出,本人强烈建议各位读者参考该文件。
Memwatch简介相关推荐
- Linux内存调试工具初探-MEMWATCH
C 语言作为 Linux 系统上标准的编程语言给予了我们对动态内存分配很大的控制权.这种自由可能会导致严重的内存管理问题,可能导致程序崩溃或随时间的推移导致性能降级. 内存泄漏(即 malloc() ...
- Linux C 编程内存泄露检测工具(二):memwatch
Memwatch简介 在三种检测工具当中,设置最简单的算是memwatch,和dmalloc一样,它能检测未释放的内存.同一段内存被释放多次.位址存取错误及不当使用未分配之内存区域.请往http:// ...
- memwatch使用
一.简介 memwatch可以跟踪程序中的内存泄漏和错误,能检测双重释放(double-free).错误释放(erroneous free).没有释放的内存(unfreed memory).溢出(Ov ...
- 使用memwatch跟踪linux内存泄漏
参考: http://blog.csdn.net/kehyuanyu/article/details/25217907 http://blog.sina.com.cn/s/blog_590be5290 ...
- etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理
1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...
- Docker学习(一)-----Docker简介与安装
一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...
- 【Spring】框架简介
[Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...
- TensorRT简介
TensorRT 介绍 引用:https://arleyzhang.github.io/articles/7f4b25ce/ 1 简介 TensorRT是一个高性能的深度学习推理(Inference) ...
- 谷粒商城学习笔记——第一期:项目简介
一.项目简介 1. 项目背景 市面上有5种常见的电商模式 B2B.B2C.C2B.C2C.O2O B2B 模式(Business to Business),是指商家和商家建立的商业关系.如阿里巴巴 B ...
最新文章
- 时间序列(七): 高冷贵族: 隐马尔可夫模型
- xamarin UWP中MessageDialog与ContentDialog的区别
- 45K!拿下 AI 技术岗,这些知识点全考了!
- switch的处理方法
- linux7清空都有a的文件,linux用户和组管理
- java 初始化和清楚_浅谈Java中的初始化和清理
- android 原型模式,原型模式-下拉刷新的全局设置
- NLP笔记之文本聚类
- 基于matlab的时频特征分析,基于MATLAB的时频分析在心电信号分析中的研究与应用...
- servlet+jsp面试题
- Java前后端分离项目部署到服务器
- linux获取本地ip命令,Shell获取当前主机ip地址
- 使用Kolla镜像Openstack多节点快速搭建部署
- css3制作菱形图片
- Exception in thread “main“ java.lang.ArrayStoreException解决方案(记录一下)
- 树莓派离线语音唤醒snowboy
- 什么是JavaBean、bean?
- <数据结构>倒拔二叉树
- 达梦客户端工具的使用
- 7个靠谱的Windows软件下载网站,个个「纯净、安全、无捆绑」!
热门文章
- steam怎么设置邮箱令牌_steam收不到邮箱令牌验证码怎么办 这些知识你不一定知道...
- 失败成就伟大:谷歌的23个失败案例
- 常见分布式算法的介绍
- Linux中gcc4.8.5升级到gcc5.4.0用已经编译好的安装包升级(重点是不用编译安装,可以更省时)
- ren域名有价值吗?值不值得投资?ren域名的应用范围有哪些?
- 【深度学习小常识】CPU(中央处理器)和GPU(图像处理器)的区别
- 前端如何调用后端接口
- PlatON和IRISnet结成战略合作伙伴,共同开拓区块链企业服务市场
- Python PyCharm Django 搭建web开发环境
- EF Data Operation With Async Task