1

サンプルのデーモン プログラムで valgrind を実行しました。親は 1000B のチャンクを割り当てた後に終了しますが、バックグラウンドで実行される子は、2 秒ごとに malloc を介してヒープに 200B のメモリを割り当て続けます。

私の質問は次のとおりです。valgrind は実際のプロセッサでプログラムを実行しますか、それとも合成 CPU で実行しますか?

実際のヒープまたは存在しない合成 RAm にメモリを割り当てますか?

プログラムをかなり長時間実行させたので、子供はヒープに2GBのメモリを割り当てました。massif でプログラムを実装すると、親の出力ファイルが 1 つ得られ、デーモン プロセスを強制終了すると、別の massif.out が得られました。ヒープ上のメモリの割り当てを示した子の場合。

4

2 に答える 2

1

Valgrind は独自の合成 CPU でプログラムを実行します。プログラム マシン コードからホスト CPU に到達するものは何もありません。

Memcheck を使用する場合、メモリ割り当ては Memcheck にフックされます。それ以外の場合、Valgrind は libc メモリ割り当てルーチンを呼び出します。

この事実は、Valgrind によるシステム サービスのデバッグを複雑にする可能性があります。

于 2012-10-11T10:05:04.617 に答える
0

memcheck をオンにすると (デフォルト)、Valgrind がヒープを管理します。つまり、すべてのメモリ関連のメソッド (malloc/free/memmove など) は、対応するメソッドの Valgrind バージョンに置き換えられます。

既に述べたように、プログラムは valgrind によって作成および管理される仮想 CPU 上で実行されています。

私の知る限り、合成 RAM の概念はありません。いずれにせよ、これはすべて実行中のプロセス (デーモン) に対して非常に透過的であり、プログラムの動作を変更するべきではありません。

したがって、答えは、合成 CPU の場合は YES であり、合成 RAM の場合はノーです。

于 2012-10-11T11:49:48.783 に答える