zoukankan      html  css  js  c++  java
  • valgrind的说明使用和原理

    编译

    #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,如果该值尚未初始化,则会报告使用未初始化内存错误。
  • 相关阅读:
    24点游戏 程序(一)
    24点游戏全解-1362组
    Android版 hanoi 汉诺塔 源码
    24点游戏 程序(二)
    Javascript 面向对象编程
    新浪微博 OAuth2 NodeJs发微博
    AT5800 [AGC043C] Giant Graph 题解
    CF1033D Divisors 题解
    CF1033E Hidden Bipartite Graph 题解
    AT???? [ABC255D] String Cards 题解
  • 原文地址:https://www.cnblogs.com/charlesblc/p/6487087.html
Copyright © 2011-2022 走看看