文档章节

Valgrind 安装使用

专业填坑
 专业填坑
发布于 2017/04/29 19:17
字数 388
阅读 18
收藏 0

valgrind通过伪造malloc()可以监控分配在堆上的数据。当程序想分配堆存储器时,valgrind将会拦截你对malloc()和free()的调用,然后运行自己的malloc()和free().valgrin的malloc()会记录调用它的是那段代码和分配了那段存储器。程序结束时,valgrind会汇报堆上有那些数据,并告示你这些数据是有哪段代码创建的。

安装编译:
命令使用:
gcc -g spies.c -o spices # -g开关告示编译器要记录编译代码的行号
valgrind --leak-check=full ./spies

输出结果如下:

==17912== HEAP SUMMARY:
==17912==     in use at exit: 180 bytes in 9 blocks # 说明有180字节留在了堆上
==17912==   total heap usage: 9 allocs, 0 frees, 180 bytes allocated # 分配了9次,释放了0次
==17912== 
==17912== 13 bytes in 1 blocks are definitely lost in loss record 3 of 9
==17912==    at 0x4A0728A: malloc (vg_replace_malloc.c:299)
==17912==    by 0x3EDAC81021: strdup (in /lib64/libc-2.12.so)
==17912==    by 0x400734: create (spies.c:28)
==17912==    by 0x4007DB: main (spies.c:50)

常见的内存分配方式分三种:静态存储,栈上分配,堆上分配。全局变量属于静态存储,它们是在编译时就被分配了存储空间,函数内的局部变量属于栈上分配,而最灵活的内存使用方式当属堆上分配,也叫做内存动态分配了。malloc() 属于堆上分配。

++malloc() 申请的内存必须在使用 free() 释放,否则会造成内存泄漏++

© 著作权归作者所有

共有 人打赏支持
专业填坑
粉丝 4
博文 74
码字总数 9463
作品 0
广州
程序员
私信 提问
64位LINUX下如何安装32位valgrind,并对32位应用程序进行内存检查

1. 到www.valgrind.org下载最新版valgrind-3.12.0.tar.bz2 2. 解压安装包:tar –jxvf valgrind-3.12.0.tar.bz2 3. 解压后生成目录valgrind-3.12.0 4. cd valgrind-3.12.0 5. 运行./autogen......

Wang_Peter
2018/01/18
393
3
valgrind简介以及在ARM上交叉编译运行

valgrind简介以及在ARM上交叉编译运行 参考博客:https://blog.csdn.net/dengcanjun6/article/details/54958359 参考博客:https://blog.csdn.net/longbei9029/article/details/78626004?lo......

qq_38631503
2018/04/19
0
0
Ubuntu下使用valgrind所遇问题

一、Valgrind的安装 a、直接使用sudo apt-get install valgrind b、valgrind官网下载http://valgrind.org/ #解压sudo tar xvf valgrind-3.8.1.tar.bz2 -C /home/worspace/ 安装 ./configurem......

地狱的烈火
2013/06/21
0
0
valgrind及graphviz分析c++性能瓶颈

使用valgrind进行性能分析,过程如下: ***@Ubuntu :~/Performance$ valgrind --tool=callgrind ./mt ==7389== Callgrind, a call-graph generating cache profiler ==7389== Copyright (C) ......

zmldndx
2013/12/20
0
0
C++雾中风景番外篇3:GDB与Valgrind ,调试代码内存的工具

写 C++的同学想必有太多和内存打交道的血泪经验了,常常被 C++的内存问题搅的焦头烂额。(写 core 的经验了)有很多同学一见到 core 就两眼一抹黑,不知所措了。笔者 入"坑"C++之后,在调试 ...

LeeHappen
2018/11/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

总结:volatile关键字

实现内存可见性原理: 对volatile变量执行写操作时,会在写操作之后加入一条store指令,将CPU缓存数据强制刷新到主内存中 对volatile变量执行读操作的时候,会在读操作前加入一条load指令,重...

浮躁的码农
43分钟前
1
0
OSChina 周六乱弹 —— 看见这花臂了么?赶紧叫大佬!

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享周华健的单曲《有没有一首歌会让你想起我》 《有没有一首歌会让你想起我》- 周华健 手机党少年们想听歌,请使劲儿戳(这里) ...

小小编辑
今天
169
5
Confluence 6 升级中的一些常见问题

升级的时候遇到了问题了吗? 如果你想尝试重新进行升级的话,你需要首先重新恢复老的备份。不要尝试再次对 Confluence 进行升级或者在升级失败后重新启动老的 Confluence。 在升级过程中的一...

honeymoose
今天
2
0
C++随笔(四)Nuget打包

首先把自己编译好的包全部准备到一个文件夹 像这样 接下来新建一个文本文档,后缀名叫.nuspec 填写内容 <?xml version="1.0"?><package xmlns="http://schemas.microsoft.com/packaging/201......

Pulsar-V
今天
3
0
再谈使用开源软件搭建数据分析平台

三年前,我写了这篇博客使用开源软件快速搭建数据分析平台, 当时收到了许多的反馈,有50个点赞和300+的收藏。到现在我还能收到一些关于dataplay2的问题。在过去的三年,开源社区和新技术的发...

naughty
今天
26
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部