Comment la disposition de la mémoire des fermetures Go dévoile leur allocation de tas
Les fermetures Go se distinguent par leur capacité à faire référence à des variables définies dans leurs fonctions environnantes . Cela soulève des questions sur leur allocation et leur disposition de mémoire.
Disposition de la mémoire des fermetures
Les littéraux de fonction de Go (essentiellement des fermetures) peuvent être attribués à des variables ou invoqués directement. Une fermeture conserve les variables de sa fonction environnante, qui persistent jusqu'à ce qu'elles ne soient plus accessibles.
Selon la spécification du langage de programmation Go, les variables qui survivent aux appels de fonction sont placées sur le tas. Ainsi, les fermetures Go sont stockées sur le tas.
Exemple d'analyse
Considérez la fonction Closure() :
<code class="go">func closure() func() *byte { var b [4 * 1024]byte return func() *byte { return &b[0] } }</code>
Chaque fermeture() l'invocation entraîne deux allocations de tas :
Ainsi, un total de 4112 octets sont alloués pour chaque fermeture.
Clé à retenir
Les fermetures Go sont simplement des variables qui vivent sur le tas, assurant la persistance des variables partagées entre la fermeture et sa fonction environnante . Cette disposition de mémoire simple permet une allocation et un accès efficaces aux variables de fermeture.
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!