Restituisce il puntatore alla struttura locale


85

Vedo alcuni esempi di codice con costrutti come questo:

type point struct {
  x, y int
}

func newPoint() *point {
  return &point{10, 20}
}

Ho uno sfondo C ++ e mi sembra un errore. Qual è la semantica di tale costrutto? Il nuovo punto viene allocato nello stack o nell'heap?


1
Una domanda simile (la risposta si collega alla documentazione): stackoverflow.com/questions/12098435/…
Denys Séguret

@ DenysSéguret non è simile
mangusta

Risposte:


109

Go esegue l'analisi della fuga dal puntatore. Se il puntatore sfugge allo stack locale, cosa che accade in questo caso, l'oggetto viene allocato nell'heap. Se non sfugge alla funzione locale, il compilatore è libero di allocarlo nello stack (sebbene non dia garanzie; dipende dal fatto che l'analisi dell'escape del puntatore possa provare che il puntatore rimane locale a questa funzione).


13
Ecco un post sul blog (disclaimer: che ho scritto) che esamina un po 'più da vicino l'analisi della fuga di Go: scvalex.net/posts/29
scvalex

@LilyBallard non ha ricevuto completamente la tua risposta. Vuoi dire che provare il fatto di sfuggire al puntatore è sempre possibile, mentre provare il fatto di NON fare l'escape non lo è?
mangusta

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.