Speicherverwaltung für eine Klasse [geschlossen
-
27-09-2019 - |
Frage
Im folgenden Code ist, wie - in Bezug auf die Speicherverwaltung - ist class A
zugewiesen und in .NET (C#) zugewiesen und ausgeführt.
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;
}
HINWEIS: Dass die Verwendung von class B
könnte entweder der Einstiegspunkt des Programms oder eine Objektinstanz sein, aber der Umfang hier ist die Speicherverwaltung und die Zuweisung der Instanz von class A
.
Lösung
Die Zeile, die Sie beschreiben, verteilt eine einzelne Instanz von A
Auf dem Haufen, wenn Sie eine neue Instanz von erstellen B
. So,
B b = new B();
wird zwei Objekte zuweisen: einer B
mit dem direkten Anruf und einem A
als Teil des Konstruktions der B
.
Die Linie selbst tut nichts bis Sie eine Instanz von erstellen B
.
A
Scheint drei Felder zu haben, die keine Referenzfelder sind, so dass es keine neuen Objekte auf dem Haufen erstellt, sondern Teil des A
Beispiel.
Das ist ungefähr das ganze Gedächtnis, das in diesem Beispiel zugewiesen wird.
BEARBEITEN:
Für die Zwecke der größeren Klarheit - ein Referenzlink zu einem Artikel, der Stack und Heap sowie Überlegungen zur Speicherallokation erläutert:http://www.simple-talk.com/dotnet/.net-framework/.net-memory-management-basics/
Andere Tipps
Wenn Sie eine Instanz von B erstellen, wird der Speicher für 1 Objekt mit einem Feld des Referenztyps ("A") zugewiesen. Gleich nach dieser neuen Instanz von a wird erstellt, die eine Speicherverteilung für Objekt mit zwei "int" -Feldern ("x", "y") und mit einem Feld von verursacht Typ ist unbekannt Typ.