Maison > développement back-end > Golang > le corps du texte

Comment le compilateur de Go gère-t-il les fonctions imbriquées ?

WBOY
Libérer: 2024-02-05 21:39:13
avant
1228 Les gens l'ont consulté

Go 的编译器如何处理嵌套函数?

Contenu de la question

Lors de l'écriture de fonctions imbriquées dans go, comment le compilateur les gère-t-il ? Devient-elle une autre fonction et placée en dehors du code, ou est-elle recréée lorsque la fonction parent est appelée ?

Par exemple :

func funca() int {
    a := 0
    funcb := func(_a int) int {
        return _a
    }
    return funcb(a)
}
Copier après la connexion

Cette fonction est-elle compilée comme suit ?

func FuncA() int {
    a := 0
    return _funcB(a)
}
func _funcB(_a int) int {
    return _a
}
Copier après la connexion

Ou compile-t-il exactement comme écrit, ce qui signifie qu'une nouvelle mémoire est allouée à chaque fois que la définition de funca 时都会为 funcb est appelée ?


Bonne réponse


Les fonctions imbriquées sont compilées une seule fois.

Étant donné que FuncB ne ferme pas les variables dans la portée environnante, FuncA n'alloue pas de mémoire tas.

Si FuncB ferme des variables dans la portée environnante, alors ces variables seront allouées sur le tas. La fonction elle-même est compilée une fois.

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!

Étiquettes associées:
source:stackoverflow.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal