2012-10-11 29 views
1

我已經對示例守護程序程序運行了valgrind。父進程在分配一個1000B的塊之後退出,但在後臺運行的子進程每隔兩秒鐘通過malloc繼續在堆上分配200B的內存。valgrind工具套件的工作

我的問題是:valgrind是否在實際的處理器或合成CPU上執行程序?

它是在實際堆上還是在不存在的合成RAm上分配內存?

因爲我讓程序運行了很長的時間,所以孩子在堆上分配了2GB的內存。在執行地塊上的程序時,我得到了父文件的一個輸出文件,並且在殺死守護程序進程時,我又獲得了另一個massif.out。對於顯示堆內存分配的孩子。

回答

1

Valgrind在自己的合成CPU中運行程序,程序機器代碼中的任何內容都不會到達主機CPU。

如果使用內存分配,則使用Memcheck,否則Valgrind將調用libc內存分配例程。

實際上,這個事實可能會使Valgrind調試系統服務變得複雜。

0

如果你打開MEMCHECK(這是默認值),然後Valgrind的將管理堆,即所有內存相關的方法(的malloc /免費/的memmove等)將被Valgrind的的版本的相應的方法代替。

如前所述,您的程序正在由valgrind創建和管理的虛擬CPU上運行。

據我所知,沒有合成RAM的概念。無論如何,所有這些對運行進程(你的守護進程)都是非常透明的,並且不會以任何方式改變程序的行爲。

所以,合成CPU的答案是YES,合成RAM的答案是YES。