Einen Zeiger auf eine lokale Struktur zurückgeben
In Go können Codefragmente wie die folgenden für Programmierer mit C-Hintergrund Bedenken aufwerfen:
type point struct { x, y int } func newPoint() *point { return &point{10, 20} }
Es stellt sich die Frage: Weist newPoint einen neuen Punkt auf dem Stapel zu oder Heap?
Pointer-Escape-Analyse
Die Antwort liegt in der Pointer-Escape-Analyse von Go. Es untersucht die Funktion und stellt fest, ob die Zeigervariable dem lokalen Stapel entkommt. Wenn dies der Fall ist, wird das Objekt auf dem Heap zugewiesen, wodurch die Speichersicherheit im gesamten Programm gewährleistet wird.
In diesem Codebeispiel entgeht die Zeigervariable dem lokalen Stapel, da sie an den Aufrufer zurückgegeben wird. Daher weist Go die Punktstruktur auf dem Heap zu, um die Speichersicherheit zu gewährleisten.
Wenn der Zeiger der lokalen Funktion nicht entkommen wäre, stünde es dem Compiler frei, ihn auf dem Stapel zuzuweisen. Der Zuordnungsort ist jedoch nicht garantiert, da er von der Präzision der Zeiger-Escape-Analyse abhängt.
Das obige ist der detaillierte Inhalt vonOrdnet „newPoint()' von Go eine Struktur auf dem Stapel oder Heap zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!