96 votes

Retourner le pointeur à la structure locale

Je vois des exemples de code avec des constructions comme celle-ci :

type point struct {
  x, y int
}

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

J'ai des connaissances en C++ et cela semble être une erreur pour moi. Quelle est la sémantique de cette construction ? Le nouveau point est-il alloué sur la pile ou le tas ?

118voto

Kevin Ballard Points 88866

Go effectue une analyse d'échappement de pointeur. Si le pointeur s'échappe de la pile locale, ce qu'il fait dans ce cas, l'objet est alloué sur le tas. S'il ne s'échappe pas de la fonction locale, le compilateur est libre de l'allouer sur la pile (bien qu'il ne donne aucune garantie ; cela dépend si l'analyse d'échappement du pointeur peut prouver que le pointeur reste local à cette fonction).

20voto

masebase Points 1160

La documentation de Golang indique qu'il est parfaitement légal de retourner un pointeur vers une variable locale." Comme je l'ai lu ici

https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/EYUuead0LsY

On dirait que le compilateur voit que vous renvoyez l'adresse et la met sur le tas pour vous. C'est un idiome commun en Go.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X