vectores punteros puntero matrices lenguaje funciones declarar con como apuntadores c memory-management malloc free

punteros - Se está liberando la memoria asignada necesaria al salir de un programa en C



punteros y matrices en c (8)

Cualquier sistema operativo moderno limpiará todo después de que finalice un proceso, pero generalmente no es una buena práctica confiar en esto.

Depende del programa que estés escribiendo. Si solo se trata de una herramienta de línea de comandos que se ejecuta y finaliza rápidamente, es posible que no se moleste en limpiar. Pero tenga en cuenta que es esta mentalidad la que causa pérdidas de memoria en demonios y programas de larga ejecución.

Si asigné memoria en mi programa C usando malloc y ahora quiero salir, ¿tengo que liberar la memoria asignada o puedo asumir que dado que todo mi programa termina, será liberado por el sistema operativo?

Corro en entorno Linux.


El sistema operativo recuperará la memoria, por lo que no necesita liberarla.

Sin embargo, la mayoría de los programas hacen memoria libre porque, si no libera ninguna memoria, es probable que tenga problemas causados ​​por estas fugas intencionales.


El sistema operativo recuperará la memoria, sin embargo, es una buena práctica liberar cosas si espera que se queden fuera del alcance antes de hacer otra cosa. Sin embargo, puede confiar más o menos en la finalización del programa para hacer frente a la gestión de la memoria por usted.


En cualquier caso, será liberado por el sistema operativo una vez finalizado el proceso. Así que no lo necesitas, pero como es una buena práctica, ¿por qué no lo haces de todos modos? :)

De hecho, con el código complejo no me arriesgaría a no lanzar algo que no estoy seguro al 100% y que será inútil porque el programa sale después. Así que para cualquier duda mínima solo libéralo.


Linux liberará la memoria asignada y cerrará los descriptores de archivo al finalizar el proceso.


Puede ser un buen diseño y muy eficiente simplemente salir y permitir que el sistema operativo limpie todo. Apple OS X ahora lo hace de forma predeterminada : las aplicaciones se eliminan sin previo aviso, a menos que la aplicación establezca un indicador de "No me mates".

A menudo, liberar cada asignación de memoria lleva un tiempo significativo. Algunas páginas de memoria pueden haber sido intercambiadas y deben leerse para que se puedan marcar como libres. El asignador de memoria tiene que trabajar mucho para actualizar los datos de seguimiento de memoria libres. Todo este esfuerzo es un desperdicio porque el programa está saliendo.

¡Pero esto debe hacerse por diseño y no porque el programador haya perdido la pista de la memoria asignada!


Sí, puedes asumir eso.

Aunque es una buena práctica desasignar la memoria inmediatamente después de que no sea necesaria, incluso para el software que se ejecuta solo por un corto tiempo.


Siempre libere la memoria asignada, ya que el sistema operativo tendrá menos memoria sin ningún motivo. Es muy notorio en los sistemas operativos pequeños que tienen un tamaño de memoria pequeño.