Ответ 1
Как уже говорилось, ссылочные типы хранятся в куче, а значения в стеке...
Здесь я хочу дать объяснение, почему...
Стек и куча?
Стек используется для статического выделения памяти и Heap для динамического выделения памяти, оба хранятся в оперативной памяти компьютера.
Переменные, размещенные в стеке, сохраняются непосредственно в памяти, и доступ к этой памяти очень быстрый, и ее распределение определяется при компиляции программы. Когда функция или метод вызывает другую функцию, которая, в свою очередь, вызывает другую функцию и т.д., Выполнение всех этих функций приостанавливается до тех пор, пока самая последняя функция не вернет свое значение. Стек всегда резервируется в порядке LIFO, последний зарезервированный блок всегда является следующим блоком, который должен быть освобожден. Это действительно упрощает отслеживание стека. Освободить блок из стека - это не более чем настройка одного указателя.
Переменным, выделенным в куче, выделяется их память во время выполнения, и доступ к этой памяти немного медленнее, но размер кучи ограничен только размером виртуальной памяти. Элементы кучи не имеют зависимостей друг от друга и всегда могут быть доступны случайным образом в любое время. Вы можете выделить блок в любое время и освободить его в любое время. Это усложняет отслеживание того, какие части кучи выделены или свободны в любой момент времени.
Для спасения закрытия: - Важно помнить, что в случаях, когда значение, хранящееся в стеке, захватывается в замыкании, это значение будет скопировано в кучу, чтобы оно оставалось доступным к моменту выполнения замыкания.
Для получения дополнительной информации: http://net-informations.com/faq/net/stack-heap.htm