以下のプログラムで:
class Main
{
static string staticVariable = "Static Variable";
string instanceVariable = "Instance Variable";
public Main(){}
}
instanceVariable
は、オブジェクトインスタンスに割り当てられたメモリ内に格納されます。 staticVariable
はどこに保存されますか、オブジェクトインスタンス自体に保存されますか、それとも別の場所に保存されますか?他の場所に保存されている場合、メモリの場所はどのように接続されていますか?
静的変数のメモリは通常、ルート化された(そして隠された)object[]
。これは、WinDbg(SOSを使用)のオブジェクトで!gcrootを実行していることがわかります。
付け加えておくと、最近発見したように、これらの参照をGCすることはできません(フィールドをnullにしない限り)。