Вопрос

В следующем коде, как - с точки зрения управления памятью - это 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.

Это было полезно?

Решение

Линия, которую вы описываете выделяет один экземпляр A на куче, когда вы создаете новый экземпляр B. Отказ Так,

B b = new B();

выделит два объекта: один B с прямым вызовом и одним A как часть построения B.

Сама линия делает ничего пока вы не создадите экземпляр B.

A кажется, имеет три поля, которые не являются эталонными полями, поэтому он не создает новые объекты на куче, но являются частью A пример.

Это примерно вся память, которая выделяется в этом примере.

РЕДАКТИРОВАТЬ:

Для целей большей ясности - ссылка на статью, объясняющее стек и соображения распределения памяти:http://www.simple-talk.com/dotnet/.net-framework/.net-memory-management-basics/

Другие советы

Когда вы создаете экземпляр B, память выделяется для 1 объекта с одним полем контрольного типа («A»). Сразу после этого новый экземпляр A создан, который вызывает распределение памяти для объекта с двумя полями «int» («X», «Y») и с одним полем Тип неизвестен тип.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top