Em muitos livros e tutoriais, eu ouvi a prática do gerenciamento de memória enfatizar e senti que algumas coisas misteriosas e terríveis aconteceriam se eu não liberasse memória depois de terminar de usá-lo.
Não posso falar por outros sistemas (embora, para mim, seja razoável supor que eles adotem uma prática semelhante), mas pelo menos no Windows, o Kernel basicamente garante a limpeza da maioria dos recursos (com exceção de alguns poucos) usados pelo um programa após o término do programa. O que inclui memória de pilha, entre várias outras coisas.
Entendo por que você deseja fechar um arquivo depois de usá-lo para disponibilizá-lo ao usuário ou por que você deseja desconectar um soquete conectado a um servidor para economizar largura de banda, mas parece bobagem você precisa gerenciar toda a sua memória usada pelo seu programa.
Agora, eu concordo que essa questão é ampla, pois como você deve lidar com sua memória se baseia em quanta memória você precisa e quando precisa, então restringirei o escopo desta pergunta a este: Se eu precisar usar um pedaço de memória durante toda a vida útil do meu programa, é realmente necessário liberá-lo imediatamente antes do término do programa?
Editar: A pergunta sugerida como duplicada era específica da família de sistemas operacionais Unix. Sua resposta principal chegou a especificar uma ferramenta específica para Linux (por exemplo, Valgrind). Esta pergunta pretende abranger a maioria dos sistemas operacionais não incorporados "normais" e por que é ou não uma boa prática liberar memória necessária durante toda a vida útil de um programa.