Maison >développement back-end >Golang >Comment Go gère-t-il le retour des pointeurs vers les structures locales ?
Retour du pointeur vers une structure locale dans Go
Dans Go, des constructions telles que celle-ci sont utilisées pour créer et renvoyer un pointeur vers une structure locale :
type point struct { x, y int } func newPoint() *point { return &point{10, 20} }
Bien que cela puisse sembler une pratique erronée en C , la sémantique en Go est différent.
Analyse d'échappement de pointeur et allocation de mémoire
Go utilise l'analyse d'échappement de pointeur pour déterminer si un pointeur échappe à la portée de la pile locale. Dans l'exemple ci-dessus, le pointeur renvoyé par newPoint() échappe effectivement à la fonction locale. En conséquence, l'objet est alloué sur le tas.
Cependant, si le pointeur devait rester dans la portée de la fonction (c'est-à-dire qu'il ne s'échappe pas), le compilateur a la liberté d'allouer l'objet sur la pile. Cependant, il est important de noter que cela n'est pas garanti par le compilateur.
Par conséquent, l'allocation de mémoire dépend de la question de savoir si l'analyse d'échappement du pointeur peut conclure sans équivoque que le pointeur reste local à la fonction. Dans les cas où le pointeur s'échappe, comme dans l'exemple fourni, l'objet est alloué sur le tas.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!