注釈付きソースコードの解釈は通常は簡単ですが、ソース行のメトリックがそのソース行から導き出された命令の実行に起因しない場合があります。 メトリックがソース行に割り当てられる方法が、不確定さをもたらす原因です。
各イベントの呼び出しスタックを処理すると、排他的メトリックは、次に実行される命令のアドレスであるリーフ PC に割り当てられます。 各命令にはその元となったソース行の番号が付けられ、ソース行の排他的メトリックはその行に属するすべての命令について集計されます。
イベント記録時に実行中の命令が属するソース行がリーフ PC が属しているソース行と同じである場合、メトリックはそのソース行の実行によってもたらされたと解釈できます。 ただし、実行中命令が属するソース行とは異なるソース行にリーフ PC が属している場合、リーフ PC が属するソース行のメトリックの少なくとも一部は、「この行の実行待機中に蓄積されたメトリック」であると解釈する必要があります。 例としては、あるソース行で計算された値を次のソース行で使用するときや、別のソース行に制御が転送されるときが挙げられます。
メトリックをどのように解釈するかは、キャッシュミスやリソース待ち行列ストールなどで実行が大幅に遅延したとき、あるいはある命令が直前の命令の結果を待っているときに最も重大な意味を持ちます。 こういった場合、ソース行のメトリックが異様に高くなり得ます。コード内の他の行を調べ、高いメトリック値の原因である行を見つけるとよいでしょう。
関連項目 | |
---|---|
「ソース」タブ 注釈付き逆アセンブリコードの解釈 |