Что такое фрейм исполнения? - PullRequest
5 голосов
/ 06 марта 2010

В C #, что такое фрейм выполнения (также я слышал об этом фрейме активации). IIRC это слот, куда идут параметры метода, но он не может запомнить все детали.

Спасибо

Ответы [ 2 ]

5 голосов
/ 06 марта 2010

«Фрейм выполнения» - это термин, который используется в интерпретируемых языках, в частности в Python.Это очень отличная модель исполнения от C #.Ближайшим эквивалентом является блок области видимости в методе C #, фрагмент кода, заключенный в фигурные скобки.Хотя фрейм выполнения Python может также распространяться на тело функции, теперь он эквивалентен фрейму стека в C #.Это еще один термин для фрейма активации.

Компилятор C # распознает объявления, локальные для блока области действия в C #.Среда выполнения этого не делает, она распознает только кадр стека, который активен на протяжении всего метода.Разница тривиально скрывается компилятором, просто объявляя сумму всех локальных переменных во всех блоках контекста в качестве фрейма активации.Это роскошь, которую переводчик Python не может себе позволить.

3 голосов
/ 06 марта 2010

Я полагаю, что вы имеете в виду фрейм стека - в этом случае ответ не относится к C # или к какому-либо конкретному языку, а скорее к платформе, на которой выполняется ваша программа.Из статьи Википедии о стеке вызовов :

Стек вызовов состоит из кадров стека (иногда называемых записями активации).Это машинно-зависимые структуры данных, содержащие информацию о состоянии подпрограммы.Каждый кадр стека соответствует вызову подпрограммы, которая еще не завершилась с возвратом.

См. Также этот ответ на предыдущий вопрос для превосходного описания стека,в том числе стековых кадров.

...