1

次のコードでは、メモリ管理の観点からclass A、.NET (C#) での割り当てと割り当て解除の方法を示しています。

class A
{
    public static m1(int x, int y)
    {
        int x, y;
        return x+y;
    }
    int m2(int p, int q)
    { 
        int p, int q;
        return p+q;
    }
    int x=10; 
    int y;
    const int x=10;
    readOnly y=20;

    public int x
    {
        get {y}
        set {y=value}
    }
}

class B
{
    A a=new A();  // what happens when initializing class A;
}

注: の使用はclass B、プログラムのエントリ ポイントまたはオブジェクト インスタンスのいずれかである可能性がありますが、ここでのスコープは、メモリ管理と のインスタンスの割り当てですclass A

4

2 に答える 2

1

A説明した行は、の新しいインスタンスを作成するときに、ヒープにの単一のインスタンスを割り当てますB。そう、

B b = new B();

は 2 つのオブジェクトを割り当てます。1 つBは直接呼び出しで、もう 1 つAB.

のインスタンスを作成するまで、行自体は何もBしません。

A参照フィールドではない 3 つのフィールドがあるように見えるため、ヒープ上に新しいオブジェクトを作成しませんが、Aインスタンスの一部です。

これが、この例で割り当てられているメモリのほぼすべてです。

編集:

より明確にするために - スタックとヒープ、およびメモリ割り当てに関する考慮事項を説明する記事への参照リンク: http://www.simple-talk.com/dotnet/.net-framework/.net-memory-management-basics/

于 2010-10-31T08:35:05.763 に答える
1

B のインスタンスを作成すると、参照型 (「A」) の 1 つのフィールドを持つ 1 つのオブジェクトにメモリが割り当てられます。その直後に、A の新しいインスタンスが作成され、2 つの「int」フィールド (「x」、「y」) とTYPE IS UNKNOWN型の 1 つのフィールドを持つオブジェクトにメモリが割り当てられます。

于 2010-10-31T08:37:07.270 に答える