编译

#gcc -g -o test test.c

内存检查
#valgrind --tool=memcheck --leak-check=yes --show-reachable=yes ./test

Memcheck 能够检测出内存问题,关键在于其建立了两个全局表。

  1. Valid-Value 表:

对于进程的整个地址空间中的每一个字节(byte),都有与之对应的 8 个 bits;对于 CPU 的每个寄存器,也有一个与之对应的 bit 向量。这些 bits 负责记录该字节或者寄存器值是否具有有效的、已初始化的值。

  1. Valid-Address 表

对于进程整个地址空间中的每一个字节(byte),还有与之对应的 1 个 bit,负责记录该地址是否能够被读写。

检测原理:

  • 当要读写内存中某个字节时,首先检查这个字节对应的 A bit。如果该A bit显示该位置是无效位置,memcheck 则报告读写错误。
  • 内核(core)类似于一个虚拟的 CPU 环境,这样当内存中的某个字节被加载到真实的 CPU 中时,该字节对应的 V bit 也被加载到虚拟的 CPU 环境中。一旦寄存器中的值,被用来产生内存地址,或者该值能够影响程序输出,则 memcheck 会检查对应的V bits,如果该值尚未初始化,则会报告使用未初始化内存错误。

valgrind的说明使用和原理相关推荐

  1. 【linux】Valgrind工具集详解(二):入门

    一.使用valgrind 1.安装 安装超级简单: sudo apt-get install valgrind 2.使用 运行valgrind -h可以查看详细使用方法,命令格式如下: valgrin ...

  2. 用valgrind 检测内存错误

    用valgrind 检测内存错误 ---------------------------------------- 前言: -------------------------------------- ...

  3. LINUX平台高级调试和优化(2018上海站)

    关于LINUX的资料浩如烟海,学习LINUX的途径也有很多,如何才能在比较短的时间里获得一个比较大的提升呢?<软件调试高级研习班>将与各位LINUX爱好者共同探索这个问题的最佳答案.本着生 ...

  4. Linux平台高级调试和优化

    关于Linux的资料浩如烟海,学习Linux的途径也有很多,如何才能在比较短的时间里获得一个比较大的提升呢?<软件调试高级研习班2018庐山秀峰站>将与各位Linux爱好者共同探索这个问题 ...

  5. valgrind的使用、原理

    valgrind支持的工具:memcheck  addrcheck cachegrind Massid helgrind  Callgrind 运行时必须指明想用的工具,如果省略工具名,默认运行mem ...

  6. 【linux】Valgrind工具集详解(十):SGCheck(检查栈和全局数组溢出)

    一.概述 SGCheck是一种用于检查栈中和全局数组溢出的工具.它的工作原理是使用一种启发式方法,该方法源于对可能的堆栈形式和全局数组访问的观察. 栈中的数据:例如函数内声明数组int a[10],而 ...

  7. 【linux】Valgrind工具集详解(六):使用Valgrind gdbserver和GDB调试程序

    一.概述 在Valgrind下运行的程序不是由CPU直接执行的.相反,它运行在Valgrind提供的合成CPU上.这就是调试器在Valgrind上运行时无法调试程序的原因. 二.快速入门 在使用Mem ...

  8. 内存泄漏的定位与排查:Heap Profiling 原理解析

    系统长时间运行之后,可用内存越来越少,甚至导致了某些服务失败,这就是典型的内存泄漏问题.这类问题通常难以预测,也很难通过静态代码梳理的方式定位.Heap Profiling 就是帮助我们解决此类问题的 ...

  9. c linux new使内存耗尽_C/C++的内存泄漏检测工具Valgrind memcheck的使用经历

    Linux下的Valgrind真是利器啊(不知道Valgrind的请自觉查看参考文献(1)(2)),帮我找出了不少C++中的内存管理错误,前一阵子还在纠结为什么VS 2013下运行良好的程序到了Lin ...

最新文章

  1. Web 第二阶段Java Script (续)
  2. 删除文件夹里的图片,打印删除日志
  3. dotcpp1115 DNA-打印图案
  4. mysql 安装部署
  5. php 编译 sass,如何在Symfony 3中使用纯PHP编译SASS(scss)
  6. 我的世界服务器权限组权限修改器,我的世界op权限组指令是什么 op权限组指令汇总...
  7. ctbs mysql_C/C++/Java
  8. 高德地图根据经纬度获取详细地址
  9. NShape(开源矢量图形编辑器) 基本功能开发(一)
  10. 【学术】分享几种论文写作神器,提高你的写作效率
  11. Linux磁盘的格式化
  12. Android中的常用控件之进度条(ProgressBar)
  13. PostMan测试http请求
  14. DeFi保险协议InsurAce.io宣布与Mushrooms Finance达成战略合作为其平台用户提供智能合约安全相关保险服务
  15. 面试官谈游戏开发入行--选择
  16. Wav ,flac,mp3,ogg 等的区别
  17. PS实战操作之滤镜、通道
  18. Vue-cli构建步骤
  19. 端口波特率有专门测试软件,波特率检查工具
  20. Android - Adapter 适配器

热门文章

  1. .NET零基础入门06:面向对象入门
  2. javascript TODO
  3. C++中public protected private关键字
  4. Dockefile CentOS SSH 服务的实现
  5. OCS 企业版图解详细部署
  6. 《智能家居产品 从设计到运营》——第2章 技术搭台——与智能家居相关的技术...
  7. Microsoft Azure Express Route (专线直连)到云端数据中心(2)
  8. linux内核编译练习
  9. 改善WPF应用程序性能的10大方法(转)
  10. 蚂蚁金服核心技术:百亿特征实时推荐算法揭秘