Coñe, simplemente era una indicación. Claro que no libera al final, ni
existe condición de salida, por lo que el código terminará colapsando el
ordenador...
Respecto a tu post anterior, si conoces el tamaño máximo de la memoria,
evidentemente, es mejor, pero si no, te toca hacerlo de una de las dos otras
formas.
Yo sigo pensando que es mejor la mía. Imagina que en cada llamada vas a
asignar un bloque de 1Kb. Eso en cualquier arquitectura de PC significa que
el bloque devuelto va a ser de 4K, por lo que vamos a tomar este valor.
Veamos cómo crece el consumo de RAM respecto a la cantidad de llamadas
recursivas:
10 -> 40K
100 -> 400K
1 000-> 4M
10.000 -> 40M
100.000 -> 400M
Con la opción que yo digo, el máximo sería 8K, aparte del ahorro en la
fragmentación de la memoria.
Creo que vale la pena complicarse un poco la vida y ahorrar esa cantidad de
memoria. Aunque el algoritmo no sea "políticamente correcto", es mucho más
eficaz.
Imagina que en lugar de 1K fueran 10K, o 10K. Imagina que ejecutas en una
PDA, o en una placa con 64K.
Aparte, tu algoritmo podría calcular 100 números primos (por ejemplo) antes
de agotar la memoria mientras que el mío podría calcular tantos como diera
el tamaño de la pila de llamadas.
--
Visita mi blog principal: http://rfog.blogsome.com
Y este sobre programación: http://geeks.ms/blogs/rfog
Libros, ciencia ficción y programación
========================================
El hogar es la prisión de la doncella y el taller de la mujer.
-- George Bernard Shaw. (1856-1950) Dramaturgo irlandés.
Post by BartomeuMe he mirado tu código con más atención y tiene un fallo, debido a que
cada nivel no limpia sus cosas.
Suponiendo que realmente quieres utilizar cada vez una memoria diferente
apuntada por el mismo puntero, vigilas correctamente la primera llamada
para no hacer un delete sin sentido, pero te olvidas de hacer un delete
despues de la última salida. Cuando se acaba la recursividad 'p' apunta a
algo, que no has borrado. Es el problema cuando un nivel tiene que hacer
delete de un new de otro nivel. Es recomendable que cada new tenga su
delete en el mismo nivel.
Post by Zephryn XirdalSi la memoria no te sirve ya en la llamada recursiva, puedes liberarla a
la entrada de ésta excepto la primera vez, ahorrarás enormes cantidades
de ella y mejorarás el rendimiento, amén de evitar fragmentación, pues si
el bloque alojado de nuevo tiene el mismo tamaño o menos, se reutilizará
char *p;
bool recursivo(bool primero)
{
if(!primero)
delete p;
p=new tal
recursivo(false);
}
etc.
--
Visita mi blog principal: http://rfog.blogsome.com
Y este sobre programación: http://geeks.ms/blogs/rfog
Libros, ciencia ficción y programación
========================================
El hogar es la prisión de la doncella y el taller de la mujer.
-- George Bernard Shaw. (1856-1950) Dramaturgo irlandés.
Post by BartomeuLa norma que recomiendo, es liberarla en el mismo nivel en que se asigna.
entrada funcion recursiva
asingnar memoria A
hacer cosas, entre ellas las llamadas recursivas necesarias
liberar memoria A
salir de la recursion
Post by RicardoHola amigos, tengo una funcion recursiva dentro de esta funcion asigno
memoria dinamicamente a un arreglo de numeros flotantes, mi pregunta
es Cuando debo liberar la memoria?
http://www.geocities.com/ricardo_rios_sv/index.html