c++ memory-leaks

c++ - ¿La memoria filtrada se libera cuando el programa sale?



memory-leaks (6)

¿Se está ejecutando en un sistema operativo de escritorio (Windows, Linux, etc.)? Si es así, sí, en general, el sistema liberará cualquier memoria asociada con el programa cuando el programa salga.

Si programé, sin saberlo, una fuga de memoria y la aplicación termina, ¿se libera la memoria filtrada?


Depende de qué memoria se haya filtrado. Parte de la memoria no puede ser recuperada por el sistema operativo. Sin embargo, la mayoría de la memoria en la mayoría de los sistemas operativos se recuperarán automáticamente cuando finalice el proceso.


El SO que ejecuta su programa usualmente tiene memoria de limpieza que no se libera explícitamente y maneja que no está cerrada explícitamente, pero esto no está garantizado por el estándar de C ++. Puede encontrar algún dispositivo integrado que no libere las pérdidas de memoria.

Dicho esto, Windows y todas las distribuciones de Linux que he visto liberan las pérdidas de memoria.

Sin embargo, puede crear fácilmente un gran bucle de pérdidas de memoria para probarlo usted mismo. Mira cómo crece el uso de tu RAM y luego cierra tu programa. Verás que el uso de RAM vuelve a bajar.

Otra consideración a tener en cuenta al utilizar C ++ es que si no está eliminando su memoria asignada en el montón, sus destructores tampoco serán invocados. A veces tendrás otros efectos secundarios si tus destructores no son llamados.


Por lo general, sí. Algunos sistemas admiten cosas como bloques de memoria compartida que no se liberan automáticamente cuando sale un programa. La mayoría aún mantiene un recuento de referencias y lo elimina cuando todos los programas que lo abrieron salen, pero algunas no (por ejemplo, Windows de 16 bits tenía algunos tipos de elementos que permanecerían asignados incluso cuando no se les refería, aunque usualmente se colgó por otras razones antes de que se acumulara suficiente para causar un problema ...)


Por lo que sé, un sistema operativo moderno liberará esta memoria una vez que el programa termine.


Sí, una "fuga de memoria" es simplemente una memoria a la que un proceso ya no hace referencia y, por lo tanto, ya no puede liberarse. El sistema operativo aún realiza un seguimiento de toda la memoria asignada a un proceso, y lo liberará cuando termine ese proceso.

Actualizar

En la gran mayoría de los casos, el sistema operativo liberará la memoria, como es el caso de los "sabores" normales de Windows, Linux, Solaris, etc. Sin embargo, es importante tener en cuenta que en entornos especializados como varios sistemas operativos en tiempo real, la memoria puede no liberarse cuando finaliza el programa.