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

Как выделена память для статической переменной?

В следующей программе:

class Main
{   
    static string staticVariable = "Static Variable";
    string instanceVariable = "Instance Variable";

    public Main(){}   
}

instanceVariable будет сохранен в памяти, выделенной для экземпляра объекта. Где будет храниться staticVariable, хранится ли он в экземпляре объекта или где-то еще? Если он хранится где-то в другом месте, как связаны ячейки памяти?

4b9b3361

Ответ 1

Память для статических переменных обычно удерживается в некотором корневом (и скрытом) object[]. Это можно увидеть, сделав! Gcroot на объекте в WinDbg (с SOS).

Просто чтобы добавить, эти ссылки никогда не могут быть GC'ed (если вы не указали это поле), как я недавно обнаружил.

Ответ 2

Например, в С++ переменные staic выделяются в глобальном пространстве памяти глобальными переменными. Компилятор использует специальное соглашение об именах, чтобы знать, что эта переменная принадлежит классу.