3

oprofile を使用してプログラムのプロファイリングを行った後、少し驚きました。

プロファイルは、私のプログラムが 85% を費やしていることを示しています_fini:

CPU: Intel Core/i7、速度 1199 MHz (推定) ユニット マスク 0x00 (ユニット マスクなし) で CPU_CLK_UNHALTED イベント (停止していない場合のクロック サイクル) をカウント 100000 サンプル % イメージ名 シンボル名 553519 85.7402 eddic _fini

他のシンボルは良さそうです。

私のプログラムは GCC 4.7 でコンパイルされています。

私が理解していることから、シンボル_finiはグローバルな破壊のための非推奨の構造であるため、プログラムがこのシンボルに多くの時間を費やす理由がわかりません。

oprofile または GCC の不適切な構成が原因でしょうか?

最適化されていないコードのプロファイリングを試みましたが、問題はありません。最適化されていないそのようなシンボルはありません。

プロファイルを修正する方法、または に多くの時間を費やさないようにする方法はあります_finiか?

ペーストが非常に長いため、ペーストできません。問題を特定できませんでした。

アイデアをありがとう

4

1 に答える 1

5

問題のコードを見ずに問題がどこにあるかを示唆するのは本当に難しいですが、_fini 時間は、グローバル変数 (またはプログラムの実行中に存在する静的関数変数) のデストラクタを示唆しています。すべてのグローバル+静的変数のクラスを検査し、それらのデストラクタが何をしているかを確認することをお勧めします-それが停止するまでプログラムの機能をコメントアウトして、時間を費やしている場所のヒントを提供します-gdbまたはを使用します_fini で何が起こっているかを検査するための別のデバッガー。

于 2012-08-08T23:23:57.980 に答える