GPRof コマンドの実装
ソース・コードは、 -pg オプションを指定してコンパイルする必要があります。
このアクションは、プロファイル作成用にコンパイルされたライブラリー・ルーチンのバージョンにリンクし、指定されたオブジェクト・ファイル (デフォルトではa.out ) 内のシンボル・テーブルを読み取り、それをコール・グラフ・プロファイル・ファイル (デフォルトではgmon.out ) と関連付けます。 これは、コンパイラーが mcount () 関数への呼び出しを、プログラムの再コンパイルされた関数ごとに生成されるオブジェクト・コードに挿入することを意味します。 mcount () 関数は、親が子関数を呼び出すたびにカウントします。 また、 monitor () 関数を使用して、各ルーチンで費やされた時間を見積もることができます。
gprof コマンドは、以下の 2 つの便利なレポートを生成します。
- コール・グラフ・プロファイル。ルーチンを CPU 時間の降順で表示し、その子孫も表示します。 プロファイルを使用すると、どの親ルーチンが特定のルーチンを最も頻繁に呼び出したか、およびどの子ルーチンが特定のルーチンによって最も頻繁に呼び出されたかを理解することができます。
- CPU 使用量のフラット・プロファイル。これは、 prof 出力と同様に、ルーチンごとの使用量と呼び出し数を示します。
各レポート・セクションは、出力列を説明する説明部分で始まります。 -b オプションを使用して、これらのページを抑止することができます。
要約の場合は -s を使用し、使用率がゼロのルーチンを表示するには -z を使用します。
プログラムが実行される場合、統計は gmon.out ファイルに収集されます。 統計には、以下の情報が含まれます。
- ロードされた実行可能プログラムおよび共用ライブラリー・オブジェクトの名前
- 各プログラム・セグメントに割り当てられた仮想メモリー・アドレス
- 各親/子の mcount () データ
- プログラム・セグメントごとに累積されたミリ秒数
その後、 gprof コマンドが発行されると、 a.out および gmon.out ファイルを読み取って、2 つのレポートを生成します。 最初にコール・グラフ・プロファイルが生成され、次にフラット・プロファイルが生成されます。 gprof 出力をファイルにリダイレクトすることをお勧めします。最初にフラット・プロファイルを参照すると、ほとんどの使用上の質問に回答する可能性があるためです。
# cc -o cwhet -pg -lm cwhet.c
# cwhet > cwhet.out
# gprof cwhet > cwhet.gprof