使用valgrind工具套件

时间:2012-10-11 09:32:56

标签: valgrind massif

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

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

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

因为我让程序运行了相当长的时间,所以孩子在堆上分配了大约2GB的内存。在massif上实现程序时,我为父进程提供了一个输出文件,并且在杀死守护进程时,我得到了另一个massif.out。对于显示堆上内存分配的子进程。

2 个答案:

答案 0 :(得分:1)

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

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

事实上,这一事实可能会使Valgrind调试系统服务变得复杂。

答案 1 :(得分:0)

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

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

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

因此合成CPU的答案是YES而合成RAM的答案是否定的。