Maison > développement back-end > Golang > Le « newPoint() » de Go alloue-t-il une structure sur la pile ou le tas ?

Le « newPoint() » de Go alloue-t-il une structure sur la pile ou le tas ?

Mary-Kate Olsen
Libérer: 2024-12-29 03:11:10
original
863 Les gens l'ont consulté

Does Go's `newPoint()` Allocate a Struct on the Stack or Heap?

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}
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal