Sommaire

Retour sur le ramasse-miettes

Le ramasse-miettes (garbage collector en anglais) constitue le dispositif clé de la gestion de la mémoire dans le cas d’un code managé. Or, le code C# est typiquement du code managé : en effet, ce code est géré à l’exécution, en l’occurrence par le CLR (Common Language Runtime).

En clair et en C#, l’humain qui développe délègue au CLR la gestion de la mémoire, mais également certains aspects de la sécurité et du typage. C’est donc l’exact opposé d’un langage comme le C++ pour lequel l’humain qui développe décide de quand et comment la mémoire est allouée et désallouée : le C++ est en effet un langage non managé.

Pour rappel, la mémoire est disponible dans deux endroits : la pile (stack) et le tas (heap). En C# :

  • à la fin d’un scope donné (à la fin d’une méthode), l’utilisation de la mémoire sur la pile est nettoyée par le CLR. L’humain n’a rien à faire.

  • le tas est, lui, géré par le ramasse-miettes qui est en charge de désallouer la mémoire allouée explicitement (grâce au mot-clé new par exemple) et qui n’est plus utilisée.

Il faut garder à l’esprit que le ramasse-miettes peut induire des considérations quant à la performance. Si le code doit répondre ...