5

関数への参照によってデータ メンバーを渡し、その関数の実行中にガベージ コレクターが実行を開始し、データ メンバーを含むオブジェクトをメモリ内に移動するとどうなりますか?

class SomeClass
{
    int someDataMember;

    void someMethod()
    {
        SomeClass.someFunction(ref someDataMember);
    }

    static void someFunction(ref int i)
    {
        i = 42;

        int[] dummy = new int[1234567890];
        // suppose the Garbage Collector kicks in here

        i = 97;
    }
}

CLR は、ガベージ コレクション中に参照パラメーターが無効にならないようにするにはどうすればよいですか? クラス参照と同じように調整されていますか?

4

2 に答える 2

0

ガベージ コレクターは、オブジェクトへのすべてのポインターのリストを保持します。このオブジェクトへのポインターがなくなった場合にのみ、オブジェクトを破棄します。
あなたの場合、関数にはオブジェクトへのポインター (「i」という名前) があるため、GC はこのオブジェクトを破棄しません。

GC の仕組みに関する完全な記事は、こちらで読むことができます。

于 2013-05-08T10:17:37.663 に答える