Se suscriben a una idea errónea bastante común de que los bloques de bloques que no se liberan, pero que aún están accesibles en el momento en que existe un programa, son fugas. Esto no es verdad. Los bloques filtrados son aquellos a los que ningún puntero todavía hace referencia, por lo tanto no pueden liberarse.
A través de los años de jugar con (y romper) muchos kernels perfectamente buenos, nunca he logrado romper suficientemente un administrador de memoria virtual hasta el punto en que ya no recupera el espacio completo de direcciones de un proceso una vez que salió. A menos que esté trabajando con un núcleo claramente marcado como "nuevo y experimental", tendrá más suerte ganando la lotería que encontrar un sistema que no emplee un administrador de memoria virtual efectivo.
No pongas cruft en tu código solo para obtener una puntuación perfecta en Valgrind. Si no tiene tareas de limpieza reales para hacer otra que liberar la memoria que todavía tiene referencias válidas, no necesita molestarse. Si alguien lanza un kill -9
a su programa, no podrá manejarlo y verá que se repite el comportamiento antiguo.
Si tiene descriptores de archivos para limpiar, bloqueos compartidos para renunciar, flujos para purgar o cualquier otra cosa que deba suceder para que otros procesos no te echen de menos cuando te vayas, por supuesto, ocúpate de eso. Simplemente no vayas a agregar código que no hace nada para resolver un problema, simplemente parece una tontería hacerlo.
Nota
Esto fue originalmente iba a ser un comentario, pero es demasiado largo y SO frunce el ceño sobre cómo escribir una novela uno de los comentarios a la vez.
alguien puede por favor s/Linux/Unix/generalizar esto? –