PDA

Ver la versión completa : Duda: Fenix y RAM de GP32



Hokutoy
21/01/2005, 10:05
Tengo una dudilla respecto a Fenix y el consumo de RAM de este.

Se supone que la GP32 tiene 8 megas de RAM no?. El fenix.RTE y el FXE ocupan unos 700 KB, así ke en teoría nos quedan unos 7 mg y 300 KB para resouces, wavs, FPGs, DCB, etc...
Porque cuando cargo unos 6 mg el FENIX ya me dice que no hay mas memoria? Me esta timando 1mg y pico por la cara o se me escapa algo?
Gracias!

PD: Tendre que administrar bien los loads/unloads pero me iría muy bien ese megilla extra. :)

Puck2099
21/01/2005, 10:16
Tengo una dudilla respecto a Fenix y el consumo de RAM de este.

Se supone que la GP32 tiene 8 megas de RAM no?. El fenix.RTE y el FXE ocupan unos 700 KB, así ke en teoría nos quedan unos 7 mg y 300 KB para resouces, wavs, FPGs, DCB, etc...
Porque cuando cargo unos 6 mg el FENIX ya me dice que no hay mas memoria? Me esta timando 1mg y pico por la cara o se me escapa algo?
Gracias!

PD: Tendre que administrar bien los loads/unloads pero me iría muy bien ese megilla extra. :)

Hola,

Seguramente se deba a que los archivos de fenix.RTE y FXE están comprimidos y se tienen que descomprimir en memoria para poder ser leídos.

De todos modos, cuando hablas de 6 megas cargados en el Fenix, ¿te refieres a 6 megas en imágenes o estás contando también las variables, constantes y demás estructuras que declaras?. Porque también ocupan memoria.

Saludos

Hokutoy
21/01/2005, 10:21
Hola,

Seguramente se deba a que los archivos de fenix.RTE y FXE están comprimidos y se tienen que descomprimir en memoria para poder ser leídos.

De todos modos, cuando hablas de 6 megas cargados en el Fenix, ¿te refieres a 6 megas en imágenes o estás contando también las variables, constantes y demás estructuras que declaras?. Porque también ocupan memoria.

Saludos

Ya decía yo que se me escapaba algo! No contaba con la descompresión de del rte/fxe y lo de las variables! :chupete:
Me va a tocar revisar el codigo para empezar a cambiar algun INT por BYTEs pa ir economizando... Asias!

Puck2099
21/01/2005, 10:25
Ya decía yo que se me escaba algo! No contaba con la descompresión de del rte/fxe y lo de las variables! :chupete:
Me va a tocar revisar el codigo para empezar a cambiar algun INT por BYTEs pa ir economizando... Asias!

Hola de nuevo,

Se me ha ocurrido que podías hacer un programa muy simple, con un bucle infinito en el que fueras declarando nuevas variables de un tipo que sepas cuanto ocupa y se muestre por pantalla cuantas variables van creadas (cuando hablo de variables me refiero a cualquier cosa que consuma memoria, variables, punteros, etc) y así ves el número hasta que se acabe la memoria.

Luego solo hay que multiplicar el número de variables por lo que ocupan en memoria y así ves cuanta memoria libre queda excluyendo los archivos de Fenix.

Saludos

Hokutoy
21/01/2005, 12:38
Hola de nuevo,

Se me ha ocurrido que podías hacer un programa muy simple, con un bucle infinito en el que fueras declarando nuevas variables de un tipo que sepas cuanto ocupa y se muestre por pantalla cuantas variables van creadas (cuando hablo de variables me refiero a cualquier cosa que consuma memoria, variables, punteros, etc) y así ves el número hasta que se acabe la memoria.

Luego solo hay que multiplicar el número de variables por lo que ocupan en memoria y así ves cuanta memoria libre queda excluyendo los archivos de Fenix.

Saludos

Mi conocimiento de Fénix es limitado pero creo que en Fenix no puedes crear variables de la nada ni generarlas sin antes declararlas en la "cabecera" donde no se admiten lineas de código para el posible generador.

Aún así es una idea interesante... se podría intentar hacer un programa que carge un FPG (archivo grafico) de 1KB y mueste en pantalla cuantas veces lo carga antes de petar para hacerse una idea, pero no sé si eso es factible por la misma razon.

Puck2099
21/01/2005, 13:49
Aún así es una idea interesante... se podría intentar hacer un programa que carge un FPG (archivo grafico) de 1KB y mueste en pantalla cuantas veces lo carga antes de petar para hacerse una idea, pero no sé si eso es factible por la misma razon.

Lo que pasa es que cargará el FPG una sola vez en memoria y luego al dibujarlo siempre estará tirando del trozo de memoria donde lo cargó, osea que no iría "comiendose" la memoria.

Pero vamos, supongo que dentro del Fénix se podrán declarar punteros, ¿no?, o habrá algún otro modo de usar memoria dinámicamente y así ir "comiéndose" la memoria de la GP32.

Algo así:



int i=1;
while (1) {
Solicita_memoria(1 KB);
Imprime_por_pantalla(i);
i = i+1;
}


Saludos

Hokutoy
21/01/2005, 15:01
Pues he intentado esto:


Program Tester;
Global
Int lol;
Begin
set_fps(30, 0);

Graph_mode = mode_16bits;
set_mode(m320x240);
Repeat
Frame;
delete_text(all_text);
lol=load_fpg("test.fpg");
x++;
write(0,100,100,0,x);
Until x<0;
End

Pero me da unos resultados confusos...
Si uso un FPG de + o - 1000KB lo carga 4 veces y peta a la quinta = 4000 KB y pico
Si uso un FPG de + o - 650KB lo carga 6 veces y peta a la septima = 3900KB y pico.
Hata aquí todo correcto pero...
Si uso un FPG de + o - 15KB lo carga 3000 veces y sigue contando sin petarse= ???

Por lo que deduzco que algo raro he hecho jejejej
A ver si algun iluminado del Fenix me hecha un cable pa salir de la duda.

Byes

Puck2099
21/01/2005, 15:08
Je, del código en Fénix no me entero de nada, pero sí es raro, sí, lo de que no casque el programa con el archivo de 15 KB...

Saludos

mark_rc
21/01/2005, 16:37
Pues he intentado esto:


Program Tester;
Global
Int lol;
Begin
set_fps(30, 0);

Graph_mode = mode_16bits;
set_mode(m320x240);
Repeat
Frame;
delete_text(all_text);
lol=load_fpg("test.fpg");
x++;
write(0,100,100,0,x);
Until x<0;
End

Pero me da unos resultados confusos...
Si uso un FPG de + o - 1000KB lo carga 4 veces y peta a la quinta = 4000 KB y pico
Si uso un FPG de + o - 650KB lo carga 6 veces y peta a la septima = 3900KB y pico.
Hata aquí todo correcto pero...
Si uso un FPG de + o - 15KB lo carga 3000 veces y sigue contando sin petarse= ???

Por lo que deduzco que algo raro he hecho jejejej
A ver si algun iluminado del Fenix me hecha un cable pa salir de la duda.

Byes


Pues hombre, así, a simple vista... Lo que debe ocurrir es que no paras de cargar el FPG en el REPEAT. Saca ese load_fpg fuera del REPEAT, a ver si mejora la cosa ;)

Hokutoy
21/01/2005, 17:53
Pues hombre, así, a simple vista... Lo que debe ocurrir es que no paras de cargar el FPG en el REPEAT. Saca ese load_fpg fuera del REPEAT, a ver si mejora la cosa ;)

Jejejeje releete el hilo Marc. La idea del programa es saturar la RAM de la GP32 para descubrir cuanta de ella deja el Fenix disponible para el ususario. :)

Segata Sanshiro
21/01/2005, 18:44
El FPG una vez descomprimido del todo ocupa:

Datos del FPG+Imágenes.

Y las imágenes ocupan:

alto*ancho*bits por pixel.

Así, una imagen de 320x240 a 16 bits ocuparía 1228800 bits, que dividido entre 8 y entre 1024 da 150 kilobytes.

mark_rc
21/01/2005, 22:17
Jejejeje releete el hilo Marc. La idea del programa es saturar la RAM de la GP32 para descubrir cuanta de ella deja el Fenix disponible para el ususario. :)

Vale XD Lo había leído desde el principio, tranquilo. Pero pensé que el código que ponías era tu problema y que lo que preguntabas al principio estaba relacionado con ello.

Slàinte
05/03/2005, 11:59
Bueno, no he seguido mucho el tema, pero hay mas factores importantes para el consumo de memoria... los graficos una vez cargados se mantienen en formato RAW en memoria y por tanto OCUPAN MAS que las versiones seriadas