PDA

Ver la versión completa : ¿Memoria libre usando SDL?



Puck2099
13/10/2005, 05:04
Hola,

¿Hay alguna forma de saber la memoria que queda libre usando SDL?

¡Qué sencillas eran las cosas con el GPSDK! :(

Eskema
13/10/2005, 06:29
Lamento no poder ayudarte, pero es interesante eso q preguntas para conocer el limite de la gp. Me uno a la peticion de puck ¿alguien sabe como?

A600
13/10/2005, 06:45
En el código fuente de las SDL de chui, mira en el directorio x_gp32/src si hay ahí alguna función que sirva para conocer la memoria libre.

Si no encuentras nada, seguramente las librerías de Mirko la tengan y sólo tendrías que añadirla a los fuentes y recompilar libc.a

oankali
13/10/2005, 17:15
Me ha costado pero por fin he encontrado la respuesta al porqué no hay ninguna función ANSI C/C++ que lo haga.
Mira aquí. (http://groups.google.com/group/comp.lang.c++/browse_frm/thread/5b7ec5bbcffededf/ae4f81607774f08a?tvc=1&q=available+memory#ae4f81607774f08a).
Eso no quiere decir que no haya funciones no ANSI que lo hagan dependiendo de la plataforma de programación.

Así que me he buscado en malloc.h del GCC y he encontrado la función mallinfo (http://www.gnu.org/software/libc/manual/html_node/Statistics-of-Malloc.html) que devuelve la estructura mallinfo con la información que buscamos en mallinfo.fordblks

A ver si te sirve.

Aiken
13/10/2005, 17:20
Eso no quiere decir que no haya funciones no ANSI que lo hagan dependiendo de la plataforma de programación.


hombre una funcion ansi c crossplataform no, pero

la SDL es un "layer" de abstraccion, asi que no entiendo cual es el problema a que existiera una SDL_MemFree() (si es que no existe) que por debajo implementara la funcion necesaria para la plataforma????

Aiken

oankali
13/10/2005, 17:38
hombre una funcion ansi c crossplataform no, pero

la SDL es un "layer" de abstraccion, asi que no entiendo cual es el problema a que existiera una SDL_MemFree() (si es que no existe) que por debajo implementara la funcion necesaria para la plataforma????

Aiken

Si lees la explicación en el link que he indicado, verás que en plataformas mutitareas el conocer la memoria disponible exacta es una tarea prácticamente imposible.
De hecho, esto es fácil de confirmar si miras la memoria disponible del Windows a través del administrador de tareas: se mueve solo, sin que hagas nada.

Pero en otras plataformas como la GP32, la cosa es diferente. Supongo que como que la SDL se diseñó sobre una plataforma multitarea, pues que no implementaron nada del estilo.
Además que sepa yo la SDL es crossplatform y si no hay función ANSI C, pues cagada.

Todo lo que digo aquí no va a misa, son solo concluisiones que he sacado en función de lo que he leído por la red.

LTK666
13/10/2005, 20:47
En uno de los ejemplos que vienen con el source de lass SDL4GP32 viene algo que quizas tepueda servir, te pego el código ;-)


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <x_gp32.h>

static int waitKey(void)
{
int ret;
x_gp32_ReadKeys();
if (ret=x_gp32_nKeys)
while(x_gp32_nKeys)
x_gp32_ReadKeys();
return ret;
}
void sayme(char *msg)
{
memset(SCREEN_BUFFER_1,-1,320*240);
x_gp32_TextOut (0,0,msg,0);
while(!waitKey());
}

char hex_msg[16];

void tohex(unsigned int h)
{
unsigned int i,r;
int d;

hex_msg[8]=0;
hex_msg[9]=0;

r=0xF0000000;
for(d=7;d>=0;d--)
{
i=(h&r)>>(d*4);
if (i>=10)
hex_msg[7-d]='A'+(i-10);
else
hex_msg[7-d]='0'+i;
r>>=4;
}
}

void main (void)
{
int cuanto=0;
int tick=0;
char msg[100];

// __malloc_max_total_mem=0x10000;
//x_gp32_SetCPUSpeed_133();
sayme("Helo, world !!!");
x_gp32_timer_counter=0;

while(!waitKey())
{
if (tick+32<x_gp32_timer_counter)
{
memset(SCREEN_BUFFER_1,-1,320*240);
memset(&msg,0,100);
sprintf((char *)&msg,"Ticks = %i",x_gp32_timer_counter);
x_gp32_TextOut (20,50,msg,0);
tick=x_gp32_timer_counter;
if (malloc(128*1024)!=NULL)
cuanto++;
sprintf((char *)&msg,"Memoria %i",cuanto*128);
x_gp32_TextOut(20,100,msg,0);
}
}
sayme("The End");
}

Whitehat
13/10/2005, 23:12
Alomejor es una bobada esto que voy a decir, pero en fin:
Y si dicha funcion no existiera, no se puede coger y crearla partiendo de la mem
que tiene completa e ir restando de alguna manera la memoria que gastamos, obviamente
teniendo que saber la cantidad de memoria qe llevamos escrita?
Esto me suena a redundante la verdad :loco:

WinterN
13/10/2005, 23:32
Alomejor es una bobada esto que voy a decir, pero en fin:
Y si dicha funcion no existiera, no se puede coger y crearla partiendo de la mem
que tiene completa e ir restando de alguna manera la memoria que gastamos, obviamente
teniendo que saber la cantidad de memoria qe llevamos escrita?
Esto me suena a redundante la verdad :loco:

Yo en Java utilizo un truco parecido. En Java tampoco existe una función que te devuelva la cantidad de memoria libre, pero sí hay una función que te devuelve el total de memoria del sistema y una que te da el total de memoria ocupado por la JVM. Haces la resta y te puedes hacer una idea...

Esto en realidad no sirve ya que hay otras muchas cosas en memoria aparte de la JVM (tu aplicación), pero en la GP podría servir ya que no tendrás aplicaciones en segundo plano salvo el SO.

Aiken
14/10/2005, 00:48
Si lees la explicación en el link que he indicado, verás que en plataformas mutitareas el conocer la memoria disponible exacta es una tarea prácticamente imposible.Pero en otras plataformas como la GP32, la cosa es diferente.

Ciertamente estaba pensando solo en la GP32 :D me da rabia porque hace años que se puede programar en la gp32 con sdl, pero viendo que todas vuestras preguntas y respuestas van pensando en la gp2x, veo que SDL no os intereso hasta lo de la gp2x :D jeje ;) bueno en cualquier caso da gusto ver gente trabajando en sdl, porque antes yo creo que era yo el unico, y nadie me respondia las dudas :D

Aiken