2

たとえば、C# で例外処理スタック フレームがコール スタックにプッシュされる順序は何ですか。メソッドがある場合:

private void MyMethod() {
  try {
    DoSomething();  
  }
  catch (Exception ex)
  {
    //Handle
  }
}

次のように、例外ハンドラごとに個別のスタック フレームが作成されますか?

DoSomething stackframe<br/>
Exception stackframe<br/>
MyMethod stackframe<br/>

また

DoSomething stackframe<br />
MyMethod stackframe<br />
Exception stackframe<br />

また

他の何か?

4

1 に答える 1

1

いいえ、例外ハンドラーを追加しても、コール スタックに新しいフレームは追加されません。適切な情報を追加するだけで、例外がスローされたときに、コール スタックの各レベルでフレームワークがその例外の適切なハンドラーを見つけることができます (実際に適切なハンドラーある場合)。

これはガベージ コレクションに少し似ています。実行のどの時点でも、GC はどのローカル変数を GC ルートとしてカウントする必要があるかを判断できます。本質的に、メソッドには実行可能コード自体よりも多くの機能があります :)

于 2009-09-16T09:21:23.090 に答える