Senior
Wie bestimmt man, ob eine Variable auf dem Heap oder im Stack liegt? Was ist Escape-Analyse und wie funktioniert sie?
sobes.tech KI
Antwort von AI
In Go wird die Lage einer Variablen (auf dem Stack oder im Heap) durch die Escape-Analyse des Compilers bestimmt. Wenn eine Variable "entkommt" außerhalb der Funktion, z.B. wenn sie zurückgegeben oder in einem globalen Bereich gespeichert wird, wird sie im Heap platziert, um ihren Lebenszyklus zu erhalten.
Die Escape-Analyse ist ein Prozess des Compilers, der bestimmt, welche Variablen auf dem Stack (schneller, mit automatischer Freigabe) platziert werden können und welche im Heap (mit Lebenszyklusverwaltung durch den Garbage Collector) abgelegt werden müssen.
Beispiel:
func foo() *int {
x := 10 // x kann "entkommen"
return &x // wir geben die Adresse von x zurück, daher muss x im Heap sein
}
func bar() {
y := 20 // y entkommt nicht außerhalb von bar
fmt.Println(y) // y kann auf dem Stack sein
}
Im ersten Fall wird die Variable x im Heap platziert, im zweiten — y auf dem Stack.