Si programé, sin saberlo, una pérdida de memoria y la aplicación termina, ¿se libera la memoria filtrada?
c++
memory-leaks
Martijn Courteaux
fuente
fuente
Respuestas:
Sí, una "pérdida de memoria" es simplemente memoria a la que un proceso ya no tiene una referencia y, por lo tanto, ya no puede liberar. El sistema operativo aún realiza un seguimiento de toda la memoria asignada a un proceso y la liberará cuando ese proceso finalice.
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, Es posible que la memoria no se libere cuando finalice el programa.
fuente
El sistema operativo que ejecuta su programa generalmente limpia la memoria que no se libera explícitamente y maneja que no se cierra explícitamente, pero esto no está garantizado por el estándar C ++. Es posible que encuentre algún dispositivo integrado que no libere sus pérdidas de memoria.
Dicho esto, Windows y todas las distribuciones de Linux que he visto liberan pérdidas de memoria.
Sin embargo, puede crear fácilmente un gran bucle de pérdidas de memoria para probarlo usted mismo. Observe cómo crece su uso de RAM y luego cierre su programa. Verá que el uso de RAM vuelve a disminuir.
Otra consideración al usar C ++ es que si no está eliminando la memoria asignada en el montón, tampoco se llamará a sus destructores. A veces, también tendrá otros efectos secundarios si no se llama a sus destructores.
fuente
¿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.
fuente
Por lo general, sí. Sin embargo, algunos sistemas admiten cosas como bloques de memoria compartida que no se liberan automáticamente cuando se cierra un programa. La mayoría aún mantienen un recuento de referencias y lo eliminan cuando todos los programas que lo abrieron salen, pero algunos no lo hacen (por ejemplo, Windows de 16 bits tenía algunos tipos de elementos que permanecerían asignados incluso cuando nada se refería a ellos, aunque Por lo general, fallaba por otras razones antes de que se acumulara lo suficiente como para causar un problema ...)
fuente
Hasta donde yo sé, un sistema operativo moderno liberará esta memoria una vez que finalice el programa.
fuente
Depende del recuerdo que hayas 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á automáticamente cuando el proceso finalice.
fuente