valgrind

40 篇文章 0 订阅
 由于最近面试,自己曾经写了一个内存泄漏检测工具,但是面试的时候,面试官经常会问到还有其他办法去检测内存,按照我的思维来说有那么几种办法:</br>
1. 由于我的开发环境是linux,可以利用命令行去检测,我们最常用的命令就是:***free,top***,这两命令用的比较多,可以看到内存使用情况,但是缺点也很大:比如内存泄漏的时候,泄漏比较慢,所以很难看出来。</br>
2. 在程序中标点,记录***new/delete***的数量,对应数量是否有差异,但是我们代码比较少的时候还能检查,代码量多的时候,就会出现问题,而且不容易去找出来。</br>
暂时我只能想到这俩种办法了,但是不我在网上去收集资料,发现在linux下面有一种Valgrind的工具,这个工具相对于内存检测,多线程竞争以及堆栈的使用,有很大帮助,所以我就想着把这个工具好好学习一下,一遍以后遇到相关问题,可以利用这个工具。</br>

----------
Valgrind包括如下一些工具:</br>
Memcheck:这是valgrind应用最广泛的工具,一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况,比如:使用未初始化的内存,使用已经释放了的内存,内存访问越界等。这也是本文将重点介绍的部分。</br>
Callgrind:它主要用来检查程序中函数调用过程中出现的问题。</br>
Cachegrind:它主要用来检查程序中缓存使用出现的问题。</br>
Helgrind:它主要用来检查多线程程序中出现的竞争问题。</br>
Massif:它主要用来检查程序中堆栈使用中出现的问题。</br>
Extension。可以利用core提供的功能,自己编写特定的内存调试工具。</br>

----------

## 检测原理: ##
1. 当要读写内存中某个字节时,首先检查这个字节对应的 A bit。如果该A bit显示该位置是无效位置,memcheck 则报告读写错误。</br>
2. 内核(core)类似于一个虚拟的 CPU 环境,这样当内存中的某个字节被加载到真实的 CPU 中时,该字节对应的 V bit 也被加载到虚拟的 CPU 环境中。一旦寄存器中的值,被用来产生内存地址,或者该值能够影响程序输出,则 memcheck 会检查对应的V bits,如果该值尚未初始化,则会报告使用未初始化内存错误。</br>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值