Disposition de la mémoire des fermetures dans Go
Les fonctions Go, y compris les fermetures, implémentent la portée lexicale, leur permettant de référencer les variables déclarées dans leur portée englobante . Ce comportement soulève la question de savoir comment ces fermetures sont représentées en mémoire.
Dans Go, les fermetures sont essentiellement des variables qui font référence à l'environnement dans lequel elles ont été créées. La mémoire allouée pour une fermeture se compose de :
La taille de la mémoire allouée pour une fermeture dépend de la plateforme et de l'architecture, mais elle implique généralement :
Par exemple, considérons la fermeture suivante :
type M int func (m *M) Adder(amount int) func() { return func() { *m = *m + amount } }
Lorsque le code appelle a := m.Adder(), deux fermetures sont créées :
Le La disposition de la mémoire de la première fermeture comprendra :
La mémoire totale allouée sera de 16 octets.
La disposition de la mémoire de la deuxième fermeture sera composée de :
La mémoire totale allouée sera de 24 octets.
En résumé, les fermetures Go sont implémentées sur le tas et stockent un pointeur vers le code de la fonction ainsi que des références aux variables capturées. La taille de la mémoire allouée dépend du nombre de variables capturées et de l'architecture de la plateforme.
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!