Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: Drumpi on November 05, 2008, 01:28:29 PM

Title: Una de punteros y formatos negativos.
Post by: Drumpi on November 05, 2008, 01:28:29 PM
Hola a todos:
Vengo porque me han surgido dos preguntas que, aunque sigo programando en Fenix, la idea es luego portarlo a bennu... por eso, y porque Splinter anda más por aquí que por divsite ^^U

Bien, la primera puede ser un poco tonta, pero no me fio de la gestion de memoria ¿Habría algún problema por usar realloc en un bucle sin frame, allocando 1 byte en cada iteración, con un número bastante alto de repeticiones? La idea básica es copiar un fichero de texto, byte a byte, sin conocer previamente el tamaño del fichero, en memoria, usando un array basado en alloc/realloc.
Si existe otra forma más elegante/correcta, me gustaría conocerla.

La segunda ya es por flojera, más que nada (y que ando un poco liado por las clases) ¿Cómo guarda Fenix/Bennu los bytes cuando uso un fwrite con un int o una word? y más importante ¿qué formato usa para números negativos? bit de signo, complemento a 1, complemento a 2, alineacion interplatanaria...

Gracias ^^U
Title: Re: Una de punteros y formatos negativos.
Post by: SplinterGU on November 05, 2008, 02:25:09 PM
En bennu...

No hay problema con la gestion de memoria, podes hacer los realloc que gustes, pero eso de leer byte a byte no es elegante, y mucho menos, es performante... Vos podes leer de a bloques y las funciones de lectura te diran cuantos elementos pudieron leer... esa es la forma correcta y la idea es que uses un buffer de un tamaño considerable, digamos 65k o puede ser mucho mas grande, pero con 65k puede ir bastante bien...

Los guarda como lo que son, pero con byteorder intel, yo hubiese "big endian", pero bueno, si lo cambio se pierde compatibilidad con todo el mundo conocido...

Title: Re: Una de punteros y formatos negativos.
Post by: kim-elet-o on November 05, 2008, 11:19:02 PM
De hecho ese sistema lo uso yo, cuando cargo la lista enlazada de los pseudocodigos de los enemigos que usa mi motor de enemigos, la causa de hacerlo asi, es que cada enemigo tiene su programa en pseudocodigo y este es de longitud variable.

Title: Re: Una de punteros y formatos negativos.
Post by: SplinterGU on November 06, 2008, 01:41:48 AM
Mi sugerencia es no usar realloc en momentos de necesitar velocidad... ya que realloc no solo aloca un nuevo espacio de memoria, sino que copia el contenido del buffer anterior al nuevo alocado...
Title: Re: Una de punteros y formatos negativos.
Post by: Drumpi on November 08, 2008, 11:26:26 PM
No, si la idea es guardar cierta info en tamaños de byte, word e int segun necesidad, pero a la hora de cargarlos, los meto byte a byte en memoria, sin saber en cada momento lo que estoy leyendo porque no hago una interpretación en tiempo real. Y cuando luego tenga que leer un int en mi "byte pointer array
Title: Re: Una de punteros y formatos negativos.
Post by: SplinterGU on November 09, 2008, 12:20:39 AM
Si usas read sobre una estructura o sobre una variable con int o int, Bennu ya interpreta el orden y te lo deja en el orden requerido por el procesador en el que estas corriendo...
Ahora si usas un byte pointer array, entonces tenes que hacer vos el orderbyte... pero para eso, ya tengo preparada una libsock nueva, que tengo que subir con funciones que sirven para esto... y aunque no uses socket te pueden servir...
Title: Re: Una de punteros y formatos negativos.
Post by: kim-elet-o on November 09, 2008, 05:09:35 PM
Bien, bien, rebien, cuando hallas añadido esas funciones, podre mejorar mis sistemas de carga de ficheros, como diria el macario ese del joseluis moreno "que contento questoyyyyy".

Title: Re: Una de punteros y formatos negativos.
Post by: SplinterGU on November 09, 2008, 09:56:24 PM
pero me confundi, porque bennu/fenix guardan los datos en littleendian order, y las funciones hton y ntoh convierten de littleendian a bigendian, en base al procesador donde estan corriendo... o sea, siempre devuelven bigendian, y las de bennu/fenix el resultado es littleendian, asi que no sirve...

para que quede claro...

save -> disco -> load

Bennu/Fenix
memoria -> littleendian -> memoria

funciones socket
memoria -> bigendian -> memoria
Title: Re: Una de punteros y formatos negativos.
Post by: SplinterGU on November 10, 2008, 12:06:42 AM
actualmente las funciones de grabacion y lectura, guardan u leen correctamente si usas variables