Где типы значения определяются в сохраненном ссылочном типе ("куча" или стек)?

Типы значения определяются в ссылочном типе, сохраненном на "куче" или на стеке?

  1. Если сохранено на "куче", то, когда типы значения хранятся на стеке?
  2. Если сохранено на стеке, то, что входит в "кучу", поскольку все заканчивается в типе значения в конце?
5
задан Gishu 10 June 2010 в 05:19
поделиться

3 ответа

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

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

3
ответ дан 14 December 2019 в 13:26
поделиться

Цитируется из здесь :

Каждая локальная переменная (т. Е. Одна объявленная в методе) хранится в стеке. Это включает переменные ссылочного типа - сама переменная находится в стеке, но помните, что значение переменная ссылочного типа - это только ссылка (или ноль), а не объект сам. Параметры метода считаются как локальные переменные тоже, но если они объявлены с модификатором ref, они не получить свой слот, но поделиться слот с переменной, используемой в вызывающий код

Я думаю, что-то вроде TextBox txtbx = new TextBox (); означает, что переменная txtbx живет в стеке, но ее значение обычно является ссылкой на объект, живущий в куче.

Переменные экземпляра для ссылочного типа всегда находятся в куче. Вот где «живет» сам объект.

1
ответ дан 14 December 2019 в 13:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: