logo

Qu’est-ce qu’une fuite de mémoire ? Comment pouvons-nous éviter?

Une fuite de mémoire se produit lorsque les programmeurs créent une mémoire dans un tas et oublient de la supprimer.

La conséquence d’une fuite de mémoire est qu’elle réduit les performances de l’ordinateur en réduisant la quantité de mémoire disponible. Finalement, dans le pire des cas, une trop grande partie de la mémoire disponible peut être allouée, tout ou partie du système ou du périphérique cesse de fonctionner correctement, l'application échoue ou le système ralentit considérablement.

Les fuites de mémoire constituent un problème particulièrement grave pour les programmes tels que les démons et les serveurs qui, par définition, ne s'arrêtent jamais.



Exemple de fuite de mémoire

L'exemple ci-dessous montre le concept de fuite de mémoire.

type de en java

C




/* Function with memory leak */> #include> void> f()> {> >int>* ptr = (>int>*)>malloc>(>sizeof>(>int>));> >/* Do some work */> >/* Return without freeing ptr*/> >return>;> }>

>

>

Causes des fuites de mémoire en C

  1. Lorsque la mémoire allouée dynamiquement n'est pas libérée en appelant free, cela entraîne des fuites de mémoire. Assurez-vous toujours que pour chaque allocation de mémoire dynamique utilisant malloc ou calloc, il existe un appel gratuit correspondant.
  2. Lorsque la trace des pointeurs faisant référence à la mémoire allouée est perdue, il peut arriver que la mémoire ne soit pas libérée. Gardez donc une trace de tous les pointeurs et assurez-vous que la mémoire est libérée.
  3. Lorsque le programme se termine brusquement et que la mémoire allouée n'est pas libérée ou si une partie du code empêche l'appel de free, des fuites de mémoire peuvent survenir.

Comment éviter les fuites de mémoire ?

Pour éviter les fuites de mémoire, la mémoire allouée sur le tas doit toujours être libérée lorsqu'elle n'est plus nécessaire.

Exemple : programme pour libérer la mémoire allouée dans le tas afin d'éviter les fuites de mémoire

Le programme ci-dessous montre que la mémoire allouée dans le tas est libérée pour éviter les fuites de mémoire.

C




/* Function without memory leak */> #include> void> f()> {> >int>* ptr = (>int>*)>malloc>(>sizeof>(>int>));> >/* Do some work */> >/* Memory allocated by malloc is released */> >free>(ptr);> >return>;> }>

>

>

Exemple : programme pour vérifier si la mémoire est libérée ou non

L'exemple ci-dessous montre comment vérifier si la mémoire allouée sur le tas est libérée ou non.

C




// C Program to check whether the memory is> // freed or not> #include> #include> int> main(>void>)> {> >int>* ptr;> >ptr = (>int>*)>malloc>(>sizeof>(>int>));> >if> (ptr == NULL)> >printf>(>'Memory Is Insuffficient '>);> >else> {> >free>(ptr);> >printf>(>'Memory Freed '>);> >}> }> // This code is contributed by sarajadhav12052009>

>

>

Sortir

Memory Freed>

Conclusion

En conclusion, des fuites de mémoire peuvent survenir lorsque nous allouons de la mémoire sur le tas mais oublions de la libérer ou de la libérer. En raison de fuites de mémoire, nous pouvons subir une dégradation des performances et le système devient instable. Les fuites de mémoire causent davantage de dégâts aux programmes de longue durée comme les serveurs. Pour éviter les fuites de mémoire, nous devons libérer la mémoire allouée dynamiquement en appelant des fonctions comme free().