Подтвердить что ты не робот

Стек и куча в С#

Возможный дубликат:
Что и где находятся стек и куча

В С# существует разница между кучей и стека. Я только что понял, что я всегда думал, что стек - это ОЗУ, а куча - жесткий диск. Но теперь я не уверен, правильно ли это. Если это не так, то в чем разница, если они хранятся в одном месте?

4b9b3361

Ответ 1

"Стек" (или, точнее, стек вызовов) - автоматически управляемая память (даже в "неуправляемых языках", таких как C): Локальные переменные хранятся в стеке в кадрах стека, которые также содержат аргументы процедур или функций, а обратный адрес и, возможно, какое-то определенное для машины состояние, которое необходимо восстановить после возврата.

Память кучи - это часть ОЗУ (а точнее: виртуальное адресное пространство), используемая для удовлетворения динамических распределений памяти (malloc в C).

Тем не менее, в С# куча и использование стека являются деталями реализации. На практике, однако, объекты ссылочного типа выделены в виде кучи; данные типа значения могут храниться как в стеке, так и в куче в зависимости от контекста (например, если это часть объекта ссылочного типа).