質問

例外処理スタックフレームが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 />

または

他に何か?

役に立ちましたか?

解決

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

ガベージコレクションのようなもので、実行のどの時点でも、GCはどのローカル変数をGCルートとしてカウントするかを決定できます。基本的に、メソッドには実行可能コード自体以外の要素があります:)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top