memoria asignada dinámicamente después de la finalización del progtwig

Cuando finaliza un progtwig C / C ++ que contiene la memoria asignada dinámicamente (utilizando malloc / nuevo) sin llamadas de envío / eliminación, ¿qué ocurre con esa memoria asignada dinámicamente? ¿El sistema operativo recupera la memoria o esa memoria se vuelve inaccesible para otros progtwigs?

    No creo que haya garantías en el estándar de lenguaje, pero los sistemas operativos modernos que admiten memoria virtual escasa y protección de memoria (como MacOS X, Linux, todas las versiones recientes de Windows y todos los teléfonos móviles actualmente fabricados) limpian automáticamente después de procesos de mal comportamiento (cuando terminan) y liberar la memoria para usted. La memoria no está disponible, sin embargo, mientras el progtwig se esté ejecutando.

    Si está progtwigndo en microcontroladores, en MacOS 9 o Earler, DOS o Windows 3.x, puede que tenga que preocuparse por las pérdidas de memoria que hacen que la memoria no esté disponible para todo el sistema operativo.

    La mayoría de los sistemas operativos modernos emplean un administrador de memoria, y todos los procesos de usuario solo ven la llamada memoria virtual , que no está relacionada con la memoria del sistema real de una manera que el progtwig podría inspeccionar. Esto significa que los progtwigs no pueden simplemente leer la memoria de otro proceso o la memoria del kernel. También significa que el administrador de memoria “liberará” por completo toda la memoria que se haya asignado a un proceso cuando ese proceso finalice, por lo que las pérdidas de memoria dentro del progtwig no suelen “afectar” al rest del sistema (aparte de tal vez forzar un gran cantidad de intercambio de disco y quizás algún comportamiento “sin memoria”).

    Esto no significa que esté bien tratar las memory leaks de manera alegre, solo significa que ningún progtwig puede dañar otros procesos en los sistemas operativos multitarea modernos (a pesar del abuso deliberado de privilegios administrativos, por supuesto).

    Respuesta corta: sí, el sistema operativo liberará esta memoria.

    La mayoría de los sistemas operativos liberarán esta memoria, sin embargo, es una mala práctica confiar en este comportamiento. Algunos sistemas operativos no liberarán esta memoria. Por ejemplo, sistemas integrados. Para la portabilidad, siempre libere toda la memoria que asigne.

    C / C ++ no tiene la función de recolección de basura. Si asigna memoria y no la libera, no sirve de nada mientras la ejecución del progtwig continúa. Esto se llama pérdida de memoria. Una vez que la ejecución finaliza, el SO recupera esta memoria y está nuevamente disponible para su uso.

    Durante la ejecución del progtwig, no puede contar con la operación que reclama la memoria. Esa sería una función de recolección de basura que se encuentra en muchos otros lenguajes, como Java y C #. Si bien la basura recolectada c ++ es posible, no creo que ninguna implementación convencional la use.

    Por otro lado, una vez que su progtwig complete su ejecución, el sistema operativo debería reclamar la memoria utilizada por el progtwig. Por lo tanto, durante la ejecución, la memoria permanece fuera de los límites, pero se vuelve a acceder después de que el progtwig finaliza.