【问题标题】:Working of the valgrind tool suitevalgrind 工具套件的工作
【发布时间】:2012-10-11 09:32:55
【问题描述】:

我在一个示例守护程序上运行了 valgrind。父进程在分配了 1000B 的块后退出,但在后台运行的子进程每两秒后通过 malloc 在堆上继续分配 200B 的内存。

我的问题是:valgrind 是在实际处理器上还是在合成 CPU 上执行程序?

它是在实际堆上分配内存还是在不存在的合成 RAM 上分配内存?

因为我让程序运行了相当长的时间,以至于孩子在堆上分配了一些 2GB 的内存。在 massif 上实现程序时,我得到了一个父级的输出文件,而在终止守护进程时,我得到了另一个 massif.out。对于显示堆上内存分配的孩子。

【问题讨论】:

    标签: valgrind massif


    【解决方案1】:

    Valgrind 在自己的合成 CPU 中运行程序,程序机器代码中的任何内容都没有到达主机 CPU。

    内存分配与 Memcheck 挂钩,如果你使用它,否则 Valgrind 会调用 libc 内存分配例程。

    事实上,这些事实可能会使系统服务的 Valgrind 调试复杂化。

    【讨论】:

      【解决方案2】:

      如果你打开memcheck(这是默认的),那么Valgrind将管理堆,即所有与内存相关的方法(malloc/free/memmove等)将被Valgrind版本的相应方法替换。

      如前所述,您的程序运行在由 valgrind 创建和管理的虚拟 CPU 上。

      据我所知,没有合成 RAM 的概念。在任何情况下,所有这些对于正在运行的进程(你的守护进程)来说都是非常透明的,并且不应该以任何方式改变你的程序的行为。

      因此,合成 CPU 的答案是肯定的,合成 RAM 的答案是否定的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-21
        • 1970-01-01
        • 1970-01-01
        • 2010-12-11
        • 2015-08-30
        • 2016-06-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多