Как выделена память для статической переменной?
В следующей программе:
class Main
{
static string staticVariable = "Static Variable";
string instanceVariable = "Instance Variable";
public Main(){}
}
instanceVariable
будет сохранен в памяти, выделенной для экземпляра объекта. Где будет храниться staticVariable
, хранится ли он в экземпляре объекта или где-то еще? Если он хранится где-то в другом месте, как связаны ячейки памяти?
Ответы
Ответ 1
Память для статических переменных обычно удерживается в некотором корневом (и скрытом) object[]
. Это можно увидеть, сделав! Gcroot на объекте в WinDbg (с SOS).
Просто чтобы добавить, эти ссылки никогда не могут быть GC'ed (если вы не указали это поле), как я недавно обнаружил.
Ответ 2
Например, в С++ переменные staic выделяются в глобальном пространстве памяти глобальными переменными. Компилятор использует специальное соглашение об именах, чтобы знать, что эта переменная принадлежит классу.