3) Callgrind は動的トランスレータのように機能し、計数計器コードで元のコードを計器します。コード内のメモリ アクセス命令ごとに (キャッシュ シミュレーション用に) インストルメント化が行われ、(お勧めします) jmp のような命令ごとに exec を追跡します。すべての基本ブロックの数。
デバッガーと同じように機能する小さなサンプリング プロファイラーがあります。プロファイリング カウンターをアプリケーションに挿入setitimer()
し、すべての SIGALRM をインターセプトして現在の$eip
値を出力します。
setitimer
以前のアプローチでいくつかのサンプリング プロファイラーがありましたprofil()
。これはglibc/gmon/gmon.c
とgprof -p
(正確にはgcc -pg
) によって使用されます。profil()
関数は、1 ミリ秒または 10 ミリ秒ごとに仮想 CPU 時間をサンプリングして、単一の連続コード フラグメントをプロファイリングできます。機能もありsprofil()
ます。
LD_PRELOAD=/lib/libpcprofile.so PCPROFILE_OUTPUT=output.file も確認してください - しかし、それが機能するか、またはどのように機能するかはわかりません
番号付きの質問の場合:
2) 「Callgrind は Cachegrind の拡張機能です。Cachegrind が行うすべての情報に加えて、コールグラフに関する追加情報を提供します。」- したがって、cachegrind にあるすべてのものを提供できますが、ユーザーはキャッシュ シミュレーションをオフにすることもできます: --simulate-cache=no
(これはデフォルト値です)
速度について: http://www.valgrind.org/docs/manual/nl-manual.html - 追加の計測を行わない Nul valgrind ツール (別名 nulgrind) のマニュアルによると、速度は 5 倍です。これは、プログラムが valgrind 自体によって動的に変換されるためです。そのため、nullgrind よりも高速に動作する valgrind 用のツールは存在しません。