Как распределяется память для статической переменной? - PullRequest
49 голосов
/ 03 декабря 2008

В приведенной ниже программе:

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

    public Main(){}   
}

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

Ответы [ 2 ]

12 голосов
/ 03 декабря 2008

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

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

0 голосов
/ 03 декабря 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...