Разработка компиляторов

       

О хранении переменных в MSIL


Существует несколько вариантов хранения переменных в MSIL:

  • в статической области памяти, существующей все время выполнения программы
  • в локальной области, которая выделяется при входе в метод;
  • внутри объекта, размещенного в куче.

Статическая область памяти предназначена, например, для статических полей класса, глобальных переменных, констант и т.п. Например, в этой области памяти должны находиться переменные, описанные с модификатором static в языке C.

Локальная память выделяется для автоматических и временных переменных, параметров и т.п.

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



Содержание раздела