En muchos libros y tutoriales, he escuchado la práctica del manejo de la memoria enfatizada y sentí que sucederían algunas cosas misteriosas y terribles si no liberaba la memoria después de terminar de usarla.
No puedo hablar por otros sistemas (aunque para mí es razonable suponer que adoptan una práctica similar), pero al menos en Windows, el Kernel básicamente garantiza la limpieza de la mayoría de los recursos (con la excepción de unos pocos) utilizados por un programa después de la terminación del programa. Que incluye memoria de montón, entre varias otras cosas.
Entiendo por qué querrías cerrar un archivo una vez que hayas terminado de usarlo para que esté disponible para el usuario o por qué quieres desconectar un socket conectado a un servidor para ahorrar ancho de banda, pero parece una tontería tiene que micro administrar TODA su memoria utilizada por su programa.
Ahora, estoy de acuerdo en que esta pregunta es amplia, ya que la forma en que debe manejar su memoria se basa en la cantidad de memoria que necesita y cuándo la necesita, por lo que limitaré el alcance de esta pregunta a esto: si necesito usar un trozo de memoria memoria a lo largo de la vida útil de mi programa, ¿es realmente necesario liberarla justo antes de la finalización del programa?
Editar: La pregunta sugerida como duplicado era específica de la familia de sistemas operativos Unix. Su respuesta principal incluso especificaba una herramienta específica para Linux (por ejemplo, Valgrind). Esta pregunta está destinada a cubrir la mayoría de los sistemas operativos no integrados "normales" y por qué es o no una buena práctica liberar memoria que se necesita durante la vida útil de un programa.