申し訳ありませんが、問題は比較的大きなプログラムでのみ発生するため、最小限の完全な例を作成することはできません.callgrindプロファイリングが何を達成することになっているのかという誤解とは対照的に、これ自体が「バグ」でさえあるかどうかはわかりません.
実行時間が約 50 50 の 2 つの連続した部分に分割される大きなプログラムがあります。最初の部分は主にファイルの読み取りであり、2 番目の部分は主に計算です。
私が期待する関数呼び出しの順序は次のとおりです。
呼び出しスコープ、呼び出し先
メイン Part1_main
Part1_main Part1_main_subfunction_1
Part1_main Part1_main_subfunction_2
Part1_main Part1_main_subfunction_3
メイン Part2_メイン
Part2_main Part2_main_subfunction_1
Part2_main Part2_main_subfunction_2
..
..
コードで callgrind を実行すると (そして osx の kcachegrind で結果を表示すると)、関数呼び出しに関するいくつかの結果が得られますが、これは 1 つのことを除いて、ほぼ予想どおりです。 : プロファイルの出力は定性的には
関数、Pct_time、Self_time
Part1_メイン 50 4
Part2_メイン 50 50
Part1_main_subfunction_1 20 4
Part1_main_subfunction_2 15 5
..
..
..
2番目の関数の自己時間が非常に高いという解釈は何ですか? プロファイラーは、他の関数を呼び出していないと考えているようです。可能性は低いですが、関数 2 のすべてがインライン化されている可能性があるため、これ以上の解決策はないはずです。これが正しい場合、これは非常に興味深いプロファイリング結果をもたらしません。
この種のものに遭遇した場合、プロファイラーにさらに解像度を表示させるにはどうすればよいでしょうか? または、私の直感が間違っているとすれば、他に何がこの動作を引き起こしているのでしょうか?
callgrind Web サイトの指示に従って、-g フラグを使用してコンパイルし、最適化をオンにしています。