Pérdida de memoria en C, C ++; se olvidó de hacer libre, eliminar

Asignamos memoria en C usando malloc y en C ++ usando nuevo. Sé que la memoria asignada debe liberarse o devolverse al sistema operativo usando free en C y eliminar en C ++. Si olvidé usar la función de liberar / eliminar después de asignar memoria, significa que habrá una pérdida de memoria.

Ahora, mi pregunta es si esta pérdida de memoria solo durante el período de tiempo de ejecución del programa; ¿o es una fuga / pérdida permanente o se gana nuevamente una vez que reinicie el sistema? ¿Cuál es el proceso interno en realidad? ¿Qué significa exactamente la pérdida / pérdida de memoria?

Estaría muy agradecido si alguien pudiera explicar esto en detalle o proporcionarme algunas buenas referencias.

ACTUALIZACIÓN 1

Después de leer algunas respuestas, aprendí que la memoria se devuelve al sistema operativo / sistema después de que el programa finaliza, si es así, ¿por qué todos necesitan preocuparse tanto por la pérdida de memoria y por qué es muy importante prevenir la pérdida de memoria?

ACTUALIZACIÓN 2

Entonces, ¿debería evitarse la pérdida de memoria para que el sistema no se bloquee debido a la falta de memoria suficiente para fines de asignación?

ACTUALIZACIÓN 3

Entonces, después de leer todas las respuestas, me di cuenta de que la pérdida de memoria es un tema importante para evitar fallos del sistema. Pero, para un principiante como yo, ¿cómo puedo estar seguro de que mi programa está completamente libre de pérdida de memoria? Intento hacerlo gratis, eliminar si estoy usando malloc, nuevo, pero a veces, se complica. ¿Existe alguna herramienta o método que pueda usar para saber si mi programa está realizando alguna pérdida de memoria?

ACTUALIZACIÓN 4

Después de leer las respuestas, ahora he entendido la importancia del código libre de pérdida de memoria, menos uso de nuevo / eliminar, más uso de STL, aprendí nuevas cosas como RAII, valgrind y buenas prácticas de programación. Gracias a todos :)