Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Где хранится переменная?


Автор: HMLd 26.7.2011, 18:04
Здраствуйте. Всегда писал на Си++, теперь при изучении шарпа возник вопрос. Если есть переменная типа-значения (value-type), например:
Код

int a;

то она хранится в стеке. А если написать 
Код

int a = new int();

то будет ли она храниться в стеке или в куче?
И то же самое насчёт ref-type. Если у меня есть объект класса, то в чём разница между SomeClass obj и SomeClass obj = new SomeClass?
Путаюсь, потому что в плюсах при использовании new память выделялась в куче. Насколько я понимаю, здесь не так.
Спасибо.

Автор: Gluttton 26.7.2011, 18:37
1. Типы-значения могут храниться как в стеке так и в куче (упаковка-распаковка): http://msdn.microsoft.com/ru-ru/library/yz2be5wk%28v=vs.90%29.aspx .
2. Ссылочные типы, на сколько я понимаю, храняться только в куче.

Автор: HMLd 26.7.2011, 19:45
Gluttton, ок, а где хранится int a = new int(); ?

Автор: Экскалупатор 26.7.2011, 19:51
HMLd, 
Код

int a;
int a = new int();

записи идентичны.
все будет зависеть от того где находится переменная. т.е. если это поле класса то весь класс лежит в управляемой куче.

Автор: CYBERDREAM 27.7.2011, 08:04
Код

int a;
int a = new int();

оператор new не является показателем ссылочного типа. Это вызов конструктора.
так что переменная а и там и там является структурой типа int

Автор: HMLd 27.7.2011, 15:52
Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)