Maison >développement back-end >Golang >Comment Go implémente-t-il les fermetures en mémoire ?

Comment Go implémente-t-il les fermetures en mémoire ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-30 13:19:02986parcourir

How Does Go Implement Closures in Memory?

Disposition de la mémoire des fermetures Go

Les fermetures Go, comme les fermetures dans de nombreux autres langages de programmation, permettent aux fonctions d'accéder à des variables définies en dehors de leur portée. Bien que le concept de fermeture soit similaire dans toutes les langues, la manière dont elles sont représentées en mémoire peut varier. Dans Go, les fermetures sont de simples allocations de tas.

La fonction m := M.Adder() crée à la fois une fermeture de fonction et une allocation pour la valeur M. La mémoire allouée pour cette fermeture contient des pointeurs vers la fonction et la valeur M. La fonction est allouée sur la pile tandis que la valeur M est allouée sur le tas. La mémoire totale allouée est de 16 octets (pour le pointeur vers la fonction et la valeur M) plus la taille de la valeur M (dans ce cas, 8 octets).

La valeur func() renvoyée par la fermeture l’appel n’alloue aucune mémoire supplémentaire. Il fait simplement référence à l'allocation de fermeture existante, qui contient des pointeurs vers la fonction et la valeur M.

Par conséquent, la mémoire totale allouée lors de l'appel de a := m.Adder() est de 24 octets (16 octets pour la fermeture et 8 octets pour la valeur M). La valeur de la fonction elle-même n'alloue aucune mémoire supplémentaire et fait simplement référence à la 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