2009-05-14 11 views
9

Duplicar: What REALLY happens when you don’t free after malloc?¿Qué sucede con la memoria que no se libera después del final del programa?

Digamos, por ejemplo:

int main() 
{ 
    char* test = new char[50000]; 
    return 0; 
} 

Lo que sucede con la memoria asignada después de que el programa había terminado? ¿Se libera para otras aplicaciones de inmediato? ¿O tal vez después de un tiempo? ¿O tal vez está perdido para el sistema para siempre? ¿O se intercambia al disco para que nunca vuelva a la RAM? O tal vez algo completamente diferente?

Me gustaría saber lo que sucede en la mayor 3 de SO: Windows (XP y arriba, si hay alguna diferencia), Linux, Mac OS X.

Respuesta

2

se va, como en el sistema operativo lo limpia. Cualquier memoria que el programa solicite, el SO lo sabe, de modo que cuando el programa se apaga, cualquier memoria utilizada por ella se libera, y está disponible para su uso por otros programas. Creo que está disponible de inmediato.

1

El sistema operativo debe recuperarlo para la memoria del sistema una vez que el proceso ha terminado de usarlo.

1

Bien en Windows, la memoria se libera con el sistema operativo cuando se cierra el programa. Si se trata de una gran cantidad de memoria, puede llevar algo de tiempo.

Por lo que recuerdo de cuando trabajé con varios sabores de Unix, es lo mismo para todos los sistemas operativos.

0

La respuesta dependerá, por supuesto, del sistema operativo, pero en general el sistema operativo pasará y barrerá cualquier memoria asignada/asignada restante cuando finalice el programa. En el caso de Linux, la limpieza se completará antes de que el proceso finalice (ingrese el estado Z).

6

En cualquier O/S con una MMU (que incluye Unix, Linux, OSX y la familia Windows NT) el proceso tiene una estructura de datos que se usa para configurar las asignaciones de página para la MMU. Cuando finaliza el proceso, se publica esta asignación y las páginas se agregan al conjunto libre del sistema operativo.

En las plataformas de O/S de memoria no protegida como DOS o algunos sistemas operativos en tiempo real, la memoria puede necesitar ser liberada explícitamente y el grupo de O/S podría perder memoria si no se ordena correctamente.

3

Todos esos momentos se perderán en el tiempo ...
como lágrimas en la lluvia

- Roy Batty en Blade Runner

Depende en gran medida en el sistema operativo. La mayoría de los sistemas operativos liberarán la memoria, otros no. Si desarrolla un sistema operativo de escritorio ahora, puede estar seguro de que la memoria se liberará. Eso es menos cierto en sistemas embebidos o teléfonos móviles, donde en algunos casos la memoria se perderá hasta el próximo reinicio del sistema operativo.

Cuestiones relacionadas