Порядок обработки кадров стека в стеке вызовов - PullRequest
2 голосов
/ 16 сентября 2009

Каков порядок, в котором кадры стека обработки исключений помещаются в стек вызовов, скажем, на C #. Если у меня есть метод:

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

Создается ли отдельный кадр стека для каждого обработчика исключений следующим образом?

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

OR

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

ИЛИ

что-то еще?

1 Ответ

1 голос
/ 16 сентября 2009

Нет, добавление обработчика исключений не добавляет новый кадр в стек вызовов. Он просто добавляет соответствующую информацию, чтобы при возникновении исключения на каждом уровне стека вызовов среда могла найти соответствующий обработчик для этого исключения (если действительно является подходящим обработчиком).

Это немного похоже на сборку мусора, где в любой точке выполнения GC может определить, какие локальные переменные должны по-прежнему считаться корнями GC - по сути, это нечто большее, чем метод самого исполняемого кода:)

...