Una de los errores más comunes cuando realizamos un programa con un lenguaje como C, son las fugas de memoria (memory leaks). Este error aunque parezca menor, tiene una gran importancia porque estamos desperdiciando parte de los recursos de nuestro equipo, dejándolos inaccesibles para todos los programas.
Una fuga de memoria consiste en reservar memoria dinámica y luego modificar el puntero que apunta a esta zona, dejándola inaccesible.
Por ejemplo en este código hay una fuga de memoria, que se produce al reutilizar el puntero sin liberar antes el bloque de 5 enteros:
#include <stdio.h>
#include <stdlib.h>
int main(){
int *pt = NULL;
pt = (int *)malloc(sizeof(int)*5);
//mas codigo ...
pt = (int *)malloc(sizeof(int)*10);
free(pt);
}
Una de las herramientas con las que podemos comprobar las fugas de memoria es Valgrind, si tenemos Ubuntu la podemos instalar con:
sudo apt-get install valgrind
Para comprobar si tenemos fugas de memoria en nuestro código ejecutamos valgrind y pasamos como argumento nuestro ejecutable.
En la imagen vemos que nos indica que hacemos dos allocs (reserva de memoria) y un único free (liberación de memoria), esto ya nos debe hacer sospechar que tenemos una fuga de memoria. Después nos indica que tenemos una fuga de memoria de tamaño 20 bytes que se encuentran en el mismo bloque. Estos 20 bytes son el resultado de 5 enteros (el tipo int tiene en mi sistema un tamaño de 4 bytes).
Como podéis ver es francamente sencillo comprobar si nuestro programa tiene fugas de memoria, con esta herramienta. Por lo que os recomendamos siempre utilizar esta herramienta para comprobar que vuestro programa este libre de este tipo de errores. Quizás alguno de nuestros lectores piense que perder 20 bytes es algo insignificante, pero si por ejemplo el programa fuera un visor de fotos y cargarse cada foto de 10Mb en memoria, ya tendríamos un importante consumo de memoria.
Hoy queremos hablaros de Docker un proyecto que cada día es más usado, porque permite…
Cada vez estamos más acostumbrados a usar código para generar la infraestructura (IaC), documentar nuestro…
Uno de los problemas que se presentan con una mayor frecuencia hoy en día, es…
Uno de los problemas que solemos tener los programadores, es que nos gusta estar a…
Docker es una de las herramientas más usadas por los desarrolladores, sin embargo, usarlo en…
Como seguramente sabrás el uso de JavaScript ha crecido exponencialmente en los últimos tiempos, sin…