Таким образом, метод B знает, куда идти после его завершения. Метод Б, на самом деле все равно, откуда он взялся.

дыдущем вопросе (Получить иерархию вызовов объектов), Я получилэтот интересный ответ:

Стек вызовов не там, чтобы сказать вам, откуда вы пришли. Это сказать вам, куда вы идете дальше.

Насколько я знаю, при достижении вызова функции программа обычно делает следующее:

Впризвание код:

сохранить обратный адрес (в стеке вызовов)сохранять состояния регистров (в стеке вызовов)записать параметры, которые будут переданы функции (в стеке вызовов или в регистрах)перейти к целевой функции

Вназывается целевой код:

Получить сохраненные переменные (при необходимости)

Процесс возвратаОтменить то, что мы сделали, когда вызвали функцию, то есть развернуть / вытолкнуть стек вызовов:

удалить локальные переменные из стека вызововудалить переменные функции из стека вызововвосстановить состояние регистров (которое мы сохранили ранее)перейти на обратный адрес (тот, который мы сохранили раньше)

Вопрос:

Как это можно рассматривать как то, что«говорит вам, куда вы идете дальше» скорее, чем"сказать вам, откуда вы пришли"?

Есть ли что-то в среде исполнения JIT C # или среды выполнения C #, которая заставляет этот стек вызовов работать по-другому?

Спасибо за любые ссылки на документацию об этом описании стека вызовов - есть много документации о том, как работает традиционный стек вызовов.

Ответы на вопрос(5)

Ваш ответ на вопрос