Управление памятью для класса [закрыто
-
27-09-2019 - |
Вопрос
В следующем коде, как - с точки зрения управления памятью - это 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») и с одним полем Тип неизвестен тип.