C/Visual C - Programa que no hace malloc pero no free

 
Vista:

Programa que no hace malloc pero no free

Publicado por Juan (3 intervenciones) el 01/03/2002 09:47:46
Hola, ha llegado a mis manos un programa que aparentemente funciona, pero he observado que crea una lista dinámica de un monton de elementos (haciendo un monton de malloc) pero no hace ningun free.
Nunca libera la memoria (supongo que eso está mal). Supongo que esto puede hacer que en un momento se haga un malloc y ya no quede mas memoria. ¿Esto dejaría la máquina colgada sin memoria o son memorias diferentes? Es una máquina Unix.
¿Cuando se termina el programa ya queda liberada la memoria o tengo que resetear la maquina?.
La verdad es que no sé si al no liberar la memoria estoy reduciendo las prestaciones de la máquina. No tengo muy claro que memoria estoy comiendome(Por ejemplo si al no liberar la memoria y ejecutar el word éste va más lento porque tiene menos memoria).
Creo que estoy un poco liado, Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Programa que no hace malloc pero no free

Publicado por Alexis Leung (70 intervenciones) el 01/03/2002 18:50:00
No se exaxctamente la respuesta, pero debo decirte que si en un programa vas a reservar memoria del monton o heap, debes liberarlo porque como tu dices siempre llega un momento en que no existe más memoria pues el monton no es inifinita.
En cuanto a lo de memoria diferente, depende... según lo que se, el compilador dependiendo del modelo en que se trabjaja este crea una zona de memoria para el monton con un segmento de 64K, pero si es en modo protegido estarías usando toda la memoria de la PC que pueda tener.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Programa que no hace malloc pero no free

Publicado por rorolopezg (1 intervención) el 02/03/2002 09:31:45
Bueno, no te preocupes que tu memira RAM no se va a agotar.

Lo que pasa es que cada proceso tiene asociado algunos segmentos (seg. de código, seg. de pila y seg. de datos) que tienen un cierto límite. Cuando un proceso comienza a pedir memoria en forma dinámica (con un malloc por ejemplo) se va asignando a un segmento de datos. Cuando se acaba el espacio en ese segmento de datos, simplemente no se sigue asignando más memoria (y cuando eso sucede, la función malloc retorna NULL).
Cuando el proceso termina, el sistema operativo libera los segmentos de dicho proceso y por ende la memoria que estaba ocupando. Eso sucede en UNIX/LINUX y en teoría también en Windows .... pero en Win9x nunca se sabe ;-)

Chao
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar