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