Renvoyer un pointeur vers une structure locale
Dans Go, des extraits de code comme les suivants peuvent soulever des inquiétudes pour les programmeurs ayant une formation en C :
type point struct { x, y int } func newPoint() *point { return &point{10, 20} }
La question se pose : est-ce que newPoint alloue un nouveau point sur la pile ou tas ?
Analyse d'évasion de pointeur
La réponse réside dans l'analyse d'évasion de pointeur de Go. Il examine la fonction et détermine si la variable de pointeur échappe à la pile locale. Si c'est le cas, l'objet est alloué sur le tas, garantissant la sécurité de la mémoire tout au long du programme.
Dans cet exemple de code, la variable pointeur échappe à la pile locale car elle est renvoyée à l'appelant. Par conséquent, Go allouera la structure point sur le tas pour garantir la sécurité de la mémoire.
Si le pointeur n'a pas échappé à la fonction locale, le compilateur serait libre de l'allouer sur la pile. Cependant, l'emplacement d'attribution n'est pas garanti, car il dépend de la précision de l'analyse d'échappement du pointeur.
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!