2012-01-23 4 views
2

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

Пожалуйста, может кто-нибудь объяснить мне, что когда я создаю объект ниже, то что происходит в стеке и что происходит в куче?

Меня интересует, где идет переменная в Method1.

class A 
{ 
    public void Method1() 
    { 
     int i = 10; 
    } 
} 

A obj = new A(); 
obj.Method1(); 
+0

Это, вероятно, будет оптимизировано далеко абы –

ответ

5

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

Если вы действительно хотите знать, в общем, есть несколько способов, как локальная переменная может быть представлена ​​в памяти:

  1. Нет представительства на всех. Если среда выполнения решит, что переменная может быть оптимизирована, она может это сделать. Это может произойти, если ничего не читается из переменной, как в вашем коде.
  2. Это может быть регистрация. Если переменная достаточно мала, чтобы вписываться в регистр, и время исполнения решает, что регистрация является эффективной.
  3. Он может быть на стеке.
  4. Это может быть часть класса в куче. Это происходит с закрытым над переменным в методе с лямбдой, блоками итераторов и async методов C# 5.
+0

+1 для первого абзаца. –

1

Сам объект идет в куче (как это ссылочный тип), ссылка на класс (obj) попадает в стек, локальная переменная int i является типом значения и попадает в стек или оптимизируется или переходит в регистр.

Но вы не должны заботиться о таких деталях реализации среды выполнения .NET, поскольку они теоретически могут меняться ... и кодирование чего-либо с ненужной зависимостью от детали реализации - это плохая практика IMHO.

+0

локальные переменное не должно идти в стек. Он может быть в регистре или полностью оптимизирован. – svick

+0

@svick спасибо, мои объяснения были слишком простыми ... уточнил ... – Yahia

Смежные вопросы