呼び出しスタック上の例外処理スタックフレームの順序
-
07-07-2019 - |
質問
例外処理スタックフレームが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ルートとしてカウントするかを決定できます。基本的に、メソッドには実行可能コード自体以外の要素があります:)
所属していません StackOverflow