Я пытаюсь узнать, как С# управляет памятью. Я застрял на статических элементах, я читал многочисленные блоги и статьи на эту тему, но я не могу найти вполне удовлетворительный ответ.
Определите блок кода, который поможет найти ответ.
class myClass
{
static string myStr = "String Data";
static int myInt = 12;
}
Прежде чем вы, ребята, поделитесь своим ответом, позвольте мне поделиться своими выводами, что знаю об этом предмете. Не стесняйтесь соглашаться или не соглашаться и помогать мне найти правильный ответ.
- Статичность только для жизни.
- Статический ссылочный тип (myStr), будет продолжаться в кучу в течение жизненного цикла.
- Статический тип значения (myInt), будет идти в стек, для жизни.
Что меня смущает, некоторые ответы, которые я нашел в Интернете, по этому вопросу.
Путаница № 1:
Когда ваша программа запускается, она загружает все связанные сборки в AppDomain. Когда сборка загружается, вызывается все статические конструкторы, включая статические поля. Они будут жить там, и единственный способ их разгрузить - выгрузить AppDomain.
В приведенных выше строках явно указано, что все статические элементы хранятся в AppDomain. Тогда почему все в Интернете говорят, что элементы "Статические" хранятся в куче/стеке?
Путаница № 2:
Каждая статическая переменная сохраняется в куче независимо от того, объявлена ли она в ссылочном типе или типе значения.
Если каждая статическая переменная хранится в куче. Тогда почему некоторые люди говорят, что статическая переменная типа значения хранится в стеке?
Пожалуйста, помогите соединить мои точки, чтобы понять управление памятью статических переменных в С#. Большое вам спасибо за ваше драгоценное время:)