GNU gprof からは、プログラムを最適化するために使用可能な情報が 2 種類提供されます。
- 最も実行時間のかかっているプログラムの関数を見つけることができるヒストグラム
- 関数がどの関数を何度呼び出すかを示すコールグラフ
プログラムの実行フローは、gprof がデータを取得できるよう変更されます。このため、このプロファイリング方法はソフトウェア介入型と考えられます。プログラム フローは、次の 2 つの方法で変更されます。
- ヒストグラム データを取得するため、プログラムは定期的に割り込まれて、そのプログラム カウンター ロケーションのサンプルが取得されます。このユーザー定義の間隔の単位は、通常ミリ秒です。プログラム カウンター ロケーションからは、その特定サンプルでどの関数が実行されたのかがわかります。数秒の長い間隔で複数サンプルを見てみると、プログラムで最も実行に時間をかけている関数がわかります。
- コールグラフ情報を取得するため、コンパイラは各関数呼び出しをアノテートし、呼び出し元および呼び出し先情報をデータ構造に格納します。
次の図はこのプロファイリング ワークフローを示しています。
図 1. プロファイリング ワークフロー
注記: プロファイリングを実行する際にガベージ コレクター フラグを使用しないでください。ガベージ コレクター フラグを使用すると、エラーが発生することがあります。
GNU gprof の詳細は、
http://sourceware.org/binutils/docs-2.18/gprof/index.html
を参照してください。