Sobes.tech
Middle

Können Strukturobjekte im Heap liegen?

sobes.tech KI

Antwort von AI

Ja, das können sie.

Objekte von Strukturen, die in C# Wertetypen sind, werden in der Regel auf dem Stack gespeichert. Sie können jedoch in folgenden Fällen im Heap liegen:

  • Sie sind Felder von Referenztypen (Klassen). Das Klassenobjekt befindet sich im Heap, und seine Strukturfelder werden zusammen mit ihm gespeichert.
  • Boxing (Boxen). Wenn ein Strukturobjekt in ein Objekt vom Typ object oder eine Schnittstelle umgewandelt wird, wird es in einen Referenztyp eingepackt und im Heap abgelegt.
  • Elemente von Arrays von Strukturen. Ein Array (das ein Referenztyp ist) wird im Heap abgelegt, und seine Strukturelemente werden im für dieses Array reservierten Speicher gespeichert.

Beispiel für Boxing:

// Das Strukturobjekt liegt auf dem Stack
int Anfangswert = 10;

// Boxing: Die Struktur wird in ein Objekt verpackt und im Heap abgelegt
object verpackterWert = Anfangswert;

// Es ist ein Cast (Unboxing) erforderlich, um mit dem Wert als int zu arbeiten
int entpackterWert = (int)verpackterWert;

Beispiel für eine Struktur als Feld einer Klasse:

// Das Klassenobjekt befindet sich im Heap
public class Container
{
    // Die Struktur als Klassenfeld wird im Heap zusammen mit dem Container-Objekt gespeichert
    public Punkt Koordinaten;
}

// Definition der Struktur
public struct Punkt
{
    public int X;
    public int Y;
}

// Erstellen eines Container-Objekts im Heap
Container c = new Container();

Beispiel für ein Array von Strukturen:

// Das Array von Punkten ist ein Referenztyp und wird im Heap abgelegt
Punkt[] punktArray = new Punkt[5];

// Die Elemente des Arrays (Strukturen Punkt) werden im für das Array reservierten Speicher im Heap gespeichert
punktArray[0] = new Punkt { X = 1, Y = 2 };