Go

Gestion mémoire

Stack vs heap, escape analysis, garbage collector, memory profiling, pprof, memory leaks

24 questions d'entretien·
Senior
1

Quelle est la différence principale entre l'allocation sur la stack et l'allocation sur le heap en Go ?

Réponse

La stack est gérée automatiquement et les allocations y sont extrêmement rapides (simple déplacement du stack pointer). Les variables sur la stack sont automatiquement libérées quand la fonction retourne. Le heap nécessite le garbage collector pour libérer la mémoire et les allocations y sont plus lentes car elles impliquent le runtime Go. Les variables qui survivent au-delà de la fonction ou dont la taille n'est pas connue à la compilation vont sur le heap.

2

Qu'est-ce que l'escape analysis en Go ?

Réponse

L'escape analysis est une analyse statique effectuée par le compilateur Go pour déterminer si une variable peut rester sur la stack ou doit être allouée sur le heap. Si le compilateur détecte qu'une variable est référencée en dehors de sa fonction de création (via un pointeur retourné, stockage dans une variable globale, etc.), la variable 'échappe' et sera allouée sur le heap. Cette analyse permet d'optimiser automatiquement les allocations mémoire.

3

Comment voir les résultats de l'escape analysis lors de la compilation ?

Réponse

Le flag -gcflags=-m permet de voir les décisions d'escape analysis. Utiliser -m=2 ou -m=3 donne plus de détails sur les raisons pour lesquelles une variable échappe. Par exemple 'go build -gcflags=-m=2' affichera des messages comme 'moved to heap: x' pour indiquer qu'une variable a été déplacée sur le heap. Cet outil est essentiel pour optimiser les allocations mémoire dans du code critique.

4

Dans quel cas une variable locale échappe-t-elle au heap ?

5

Quel est le rôle principal du garbage collector en Go ?

+21 questions d'entretien

Maîtrise Go pour ton prochain entretien

Accède à toutes les questions, flashcards, tests techniques, exercices de code review et simulateurs d'entretien.

Commencer gratuitement