[C] (Consulta) Duda cuando un programa en C termina y memoria dinámica

Iniciado por class_OpenGL, 29 Mayo 2016, 19:53 PM

0 Miembros y 1 Visitante están viendo este tema.

class_OpenGL

Hola, hoy tengo una duda que me gustaría solventar.

¿ANSI C nos asegura que cuando un programa que finaliza bruscamente (con return en la función main), el programa libera la memoria dinámica, o eso solo ocurre dependiendo del sistema operativo?

Espero que se comprenda mi duda. Muchas gracias.

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

AlbertoBSD

En teoria eso depende totalmente del sistema operativo.

Cuando ejecutas el programa el sistema le asigna recursos y al final los recicla.

Si te fijas cuando inicias el programa las variables pueden estar o no estar inicializadas y si te pones a ejecutar un programa y pides un poco de memoria dinamica. puedes imprimir X cantidad de bytes mas y tal vez veas datos de programas viejos.

Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

class_OpenGL

Si, pero no me refiero a si los datos quedan guardados, que supongo que si. A lo que me refiero, es, si por ejemplo mi programa ha asignado 100 bytes de memoria dinámica y el programa se cierra sin haber llamado a free, entonces mi pregunta es si a otro programa se le podrían asignar esos mismos 100 bytes o no.

Básicamente, pregunto que si al hacer return en la función main habiendo llamado a malloc, esta instrucción "llama" a free liberando toda la memoria dinámica usada por el programa, o esto lo hace el sistema operativo, o tendría que reiniciar el ordenador porque esa memoria ha quedado asignada a un programa que ya se ha cerrado y "se ha perdido la referencia a esa memoria dinámica". Gracias!

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

geeke

Cita de: class_OpenGL en 29 Mayo 2016, 20:57 PM
"se ha perdido la referencia a esa memoria dinámica"

Eso no pasa al menos en los sistemas operativos modernos porque estos realizan un seguimiento de toda la memoria reservada por un programa y cuando este finaliza (por cualquier razón) sin haber liberado la memoria el sistema procede a recuperar toda la memoria asignada

class_OpenGL


Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL