logo

¿Qué es la pérdida de memoria? ¿Cómo podemos evitarlo?

Se produce una pérdida de memoria cuando los programadores crean una memoria en un montón y se olvidan de eliminarla.

La consecuencia de la pérdida de memoria es que reduce el rendimiento de la computadora al reducir la cantidad de memoria disponible. Con el tiempo, en el peor de los casos, se puede asignar demasiada memoria disponible, todo o parte del sistema o dispositivo deja de funcionar correctamente, la aplicación falla o el sistema se ralentiza enormemente.



Las pérdidas de memoria son problemas particularmente graves para programas como demonios y servidores que, por definición, nunca terminan.

Ejemplo de pérdida de memoria

El siguiente ejemplo muestra el concepto de pérdida de memoria.

guardar desde

C








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

>

>

Causas de pérdidas de memoria en C

  1. Cuando la memoria asignada dinámicamente no se libera llamando a free, se producen pérdidas de memoria. Asegúrese siempre de que por cada asignación de memoria dinámica que utilice malloc o calloc, haya una llamada gratuita correspondiente.
  2. Cuando se pierde el seguimiento de los punteros que hacen referencia a la memoria asignada, puede suceder que la memoria no se libere. Por lo tanto, realice un seguimiento de todos los punteros y asegúrese de que se libere la memoria.
  3. Cuando el programa finaliza abruptamente y la memoria asignada no se libera o si alguna parte del código impide la llamada libre, pueden ocurrir pérdidas de memoria.

¿Cómo evitar pérdidas de memoria?

Para evitar pérdidas de memoria, la memoria asignada en el montón siempre debe liberarse cuando ya no sea necesaria.

Ejemplo: programa para liberar memoria asignada en el montón para evitar pérdidas de memoria

El siguiente programa muestra que la memoria asignada en el montón se libera para evitar pérdidas de memoria.

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>;> }>

>

>

Ejemplo: programa para comprobar si la memoria está liberada o no

El siguiente ejemplo demuestra cómo comprobar si la memoria asignada en el montón está liberada o no.

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>

>

>

Producción

Memory Freed>

Conclusión

En conclusión, pueden ocurrir pérdidas de memoria cuando asignamos memoria en el montón pero nos olvidamos de liberarla o liberarla. Debido a pérdidas de memoria, podemos experimentar una degradación del rendimiento y el sistema se vuelve inestable. Las pérdidas de memoria causan más daño a los programas de larga ejecución, como los servidores. Para evitar pérdidas de memoria, debemos liberar la memoria asignada dinámicamente llamando a funciones como free().