Ответ 1
"Стек" (или, точнее, стек вызовов) - автоматически управляемая память (даже в "неуправляемых языках", таких как C): Локальные переменные хранятся в стеке в кадрах стека, которые также содержат аргументы процедур или функций, а обратный адрес и, возможно, какое-то определенное для машины состояние, которое необходимо восстановить после возврата.
Память кучи - это часть ОЗУ (а точнее: виртуальное адресное пространство), используемая для удовлетворения динамических распределений памяти (malloc
в C).
Тем не менее, в С# куча и использование стека являются деталями реализации. На практике, однако, объекты ссылочного типа выделены в виде кучи; данные типа значения могут храниться как в стеке, так и в куче в зависимости от контекста (например, если это часть объекта ссылочного типа).