Maison  >  Article  >  développement back-end  >  Pourquoi les fermetures Go sont-elles allouées sur le tas ?

Pourquoi les fermetures Go sont-elles allouées sur le tas ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-28 12:26:31491parcourir

 Why are Go Closures Allocated on the Heap?

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 :

  • 16 octets pour la structure de fermeture
  • 4096 octets pour le tableau b

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!

Déclaration:
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