Datos, memoria y performance...

Started by Rein (K´)ah Al-Ghul, January 16, 2010, 04:01:44 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Rein (K´)ah Al-Ghul

Como saben estoy con un simulador de batallas (bah, RPG en tiempo No real)

Manejo una cantidad mas o menos importante de datos
(structuras con mas structuras dentro...)
Struct Player[2]
Struct Pilot
String Name = "";
Char Rank = "D";
String PilotType ="Universal"
Byte Level  = 1;
Word Exp = 0;
Word PP = 0;
Byte SP = 0;
Byte Will = 100;
Word Syncro = 50;

Struct ComandPilot
Struct Offense
Byte Attack = 0;
Byte Melee = 0;
Byte Shooting = 0;
End //fin del struct de los comandos ofensivos
Struct Defence
Byte Defence = 0;
Byte Evade = 0;
Byte Shield = 0;
Byte Barrier = 0;
Byte KiriBarai = 0;
Byte ShootDown = 0;
End //fin del struct de los comando defensivos
Struct Movement
Byte Fordward = 0;
Byte Backward = 0;
Byte Assault = 0;
Byte Retreat = 0;
End //fin del struct de los movimientos
Struct Special
Byte Bushin = 0;
Byte Jump = 0;
Byte LockOn = 0;
Byte Potential = 0;
Byte Strengthen = 0;
End //fin de los comando especiales del piloto
End // Fin de los comandos del piloto
End //final de la estructura Piloto
Struct Mech
String Name = "";
Char Rank = "D";
String MechType ="Universal"
Byte MechMetaType = 0; // false para real ( 0 ) true para Super ( 1 )
String Size = "SS";
Byte PilotSeatMax = 1;
Byte PilotSeat = 0;
Byte APMax = 1;
Byte AP = 0;
Float TeamWeight = 1;
Dword HPMax = 1;
Dword HP = 0;
Word ENMax = 1;
Word EN = 0;
Word ArmorMax = 1;
Word Armor = 0;
Word VP = 0;
Byte SelectedWeapons = 1;
Byte BuildShield = 0;  // false ( 0 ) true ( 1 )
Byte Shield = 0;  // false ( 0 ) true ( 1 )
Struct Terrain
Byte Air = 0; // false ( 0 ) true ( 1 )
Byte Ground = 0; // false  ( 0 ) true  ( 1 )
Byte Water = 0; // false ( 0 ) true  ( 1 )
Byte Space = 0; // false  ( 0 ) true ( 1 )
End //fin del struct de los terrenos
Struct BattleSuport
Byte ShootDown = 0; // false ( 0 ) true ( 1 )
Byte KiriBarai = 0; // false  ( 0 ) true  ( 1 )
Byte BuildShield = 0; // false ( 0 ) true  ( 1 )
Byte Shield = 0; // false ( 0 ) true ( 1 )
Byte Barrier = 0; // false  ( 0 ) true  ( 1 )
Byte Field = 0; // false ( 0 ) true  ( 1 )
Byte Repair = 0; // false  ( 0 ) true ( 1 )
Byte Resupply = 0; // false ( 0 ) true ( 1 )
End //fin del struct de los terrenos
End // fin datos del Mech
Struct ArmasMech [4]
String Name = "";
Char Rank = "D";
String MechType ="Universal"
Byte MechMetaType = 0; // false para Melee ( 0 ) true para Shooting ( 1 )
String Class = "";
Byte Distance = 1;
Word PowerMax = 0;
Word Power = 0;
Byte AmmoMax = 0;
Byte Ammo = 0;
Byte EN = 0 ;
Byte Will = 0;
Risk =0;
Byte AP = 1;
Byte Build = 0; // false ( 0 ) true ( 1 )
Byte Selected = 1; // false ( 0 ) true ( 1 )
Struct Effects
Byte Charge = 0; // false ( 0 ) true ( 1 )
Byte Wait = 0; // false  ( 0 ) true  ( 1 )
Byte Aproach = 0; // false ( 0 ) true  ( 1 )
Byte Away = 0; // false ( 0 ) true ( 1 )
Byte ShootDown = 0; // false  ( 0 ) true  ( 1 )
Byte KiriBarai = 0; // false ( 0 ) true  ( 1 )
Byte Movility = 0; // false  ( 0 ) true ( 1 )
Byte Paralyze = 0; // false ( 0 ) true ( 1 )
Byte BarrierPierce = 0; // false ( 0 ) true ( 1 )
Byte KiriBarai = 0; // false  ( 0 ) true  ( 1 )
Byte LockOn = 0; // false ( 0 ) true  ( 1 )
Byte Double = 0; // false ( 0 ) true ( 1 )
Byte All = 0; // false  ( 0 ) true  ( 1 )
Word RivalENReduce = 0;
Word RivalArmorReduce = 0;
Word RivalPowerReduce = 0;
Word UserENReduce = 0;
Word UserArmorReduce = 0;
Word UserPowerReduce = 0;
End // fin de la estructura de los efectos del arma
End //fin de las armas activas
Struct Shield[2]
String Name ="";
Dword HPMax;
Dword HP;
Word ArmorMax = 0;
Word Armor = 0;
Word VP = 0;
End //fin de la estructuda shield
Struct Barrier
String Name = "";
Byte EN = 0;
DuracionTurnoMax = 1;
DuracionTurno = 0;
End //fin de la estructura Barrier
Struct Field
String Name ="";
AbsorcionDaño = 0;
GastoEnRoudn = 0;
End //fin de la estructura Field
End //final de la estructura jugador

Y eso que aun me faltan declarar datos XD

Mi pregunta es como y cuanto ocupan los datos en memoria (en las estructuras) y con que tipo de datos se obtiene la mejor performance en los calculos...

El tema de la cantidad de memoria que ocupan las variables constantes?

Rein (K´)ah Al-Ghul
Infected with the Krieger strain of the Human-MetaHuman Vampiric Virus.

en vez de darme Karma positivo, denme (K´)arma negativ

SplinterGU

para saber el tamaño que ocupa podes usar sizeof(Variable) o sizeof(tipo)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Windgate

Sí, eso es, haz un write de sizeof ( ) aplicado a la estructura que has definido y lo sabrás, si tienes 1024x1024 variables de ese tipo verás que la cantidad de Mb de RAM que te vas a comer es realmente grande :P

Me refiero a hacer:

write ( 0 , 0 , 0 , 0 , sizeof ( player ) );
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Rein (K´)ah Al-Ghul

#4
Lo decia, por la cantidad de memoria que ocupan las variables segun el tipo de dato...
Y como lo hace con las estructuras...

Para saber la mejor forma de armar las estructuras de datos y que tipos de datos usar para mantener mas o menos balanceado la relacion MemoriaDatos Vs PerformanceCalculoGraficosEtc

De todas formas gracias...


Rein (K´)ah Al-Ghul
Infected with the Krieger strain of the Human-MetaHuman Vampiric Virus.

en vez de darme Karma positivo, denme (K´)arma negativ

Drumpi

Te digo lo mismo que le dije a otra persona: si vas a usar variables booleanas, agrúpalas de 8 en 8 y te ahorrarás 7 bytes, luego haces

if ((dato_b & 1) == 1) //primer bit
if ((dato_b & 2) == 2) //segundo bit
if ((dato_b & 4) == 4) //tercer bit
if ((dato_b & 8) == 8) //cuarto bit

Y así, esta comprobación no ocupa más de dos ciclos (vamos, que es casi tan básica como una suma).

Por cierto, creo que ya lo he preguntado alguna vez y siempre se me olvida ¿cómo se representan valores binarios en el código, o hexadecimales? creo que alguna vez he usado la notación hxx (por ejemplo, h0F es 16).
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Rein (K´)ah Al-Ghul

#6
Quote from: Drumpi on January 16, 2010, 10:43:11 PM
Te digo lo mismo que le dije a otra persona: si vas a usar variables booleanas, agrúpalas de 8 en 8 y te ahorrarás 7 bytes, luego haces

if ((dato_b & 1) == 1) //primer bit
if ((dato_b & 2) == 2) //segundo bit
if ((dato_b & 4) == 4) //tercer bit
if ((dato_b & 8) == 8) //cuarto bit

Y así, esta comprobación no ocupa más de dos ciclos (vamos, que es casi tan básica como una suma).

Por cierto, creo que ya lo he preguntado alguna vez y siempre se me olvida ¿cómo se representan valores binarios en el código, o hexadecimales? creo que alguna vez he usado la notación hxx (por ejemplo, h0F es 16).
eso es interesante
n.n
Ahorraria Bastante memoria asi
gracias Drumpi...

por cierto F en hexa es 15 no 16 :P
jajjaja
16 seria h10 :P

0 + F = 15
1 + E = 15
2 + D = 15
3 + C = 15
4 + B = 15
5 + A = 15
6 + 9 = 15
7 + 8 = 15

Rein (K´)ah Al-Ghul
Infected with the Krieger strain of the Human-MetaHuman Vampiric Virus.

en vez de darme Karma positivo, denme (K´)arma negativ

SplinterGU

cuando se chequea 1 solo bit, no es necesario poner el == con poner & valor es suficiente... y cuando se usan mas de 1 bit, si no nos interesa saber cual de esos bits, tampoco es necesario el ==

por ejemplo


if ( dato_b & 1 ) ....

if ( dato_b & 3 ) .... /* caso 2 bits y no me interesa saber cual de los 2 */

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

en bennu los hexa se representan con una h al final, y los binarios con una b...

ejemplos...

10h = 16 decimal
0fh = 15 decimal
04h = 4 decimal

0011b = 03h = 3 decimal
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Wiiii, ya me iba haciendo mucha falta saber el binario, la de veces que he trabajado con máscaras o potencias de 2 con la calculadora al lado.
Nada, nada, karma up, puede que sea por una tontería, pero seguro que hay otras cosas por las que te mereces el karma y no te lo habré dado antes ;D
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Rein (K´)ah Al-Ghul

Quote from: Drumpi on January 18, 2010, 02:15:14 PM
Wiiii, ya me iba haciendo mucha falta saber el binario, la de veces que he trabajado con máscaras o potencias de 2 con la calculadora al lado.
Nada, nada, karma up, puede que sea por una tontería, pero seguro que hay otras cosas por las que te mereces el karma y no te lo habré dado antes ;D

El flamebird no tenia una utilidad de conversor entre hexa y binario??

Rein (K´)ah Al-Ghul
Infected with the Krieger strain of the Human-MetaHuman Vampiric Virus.

en vez de darme Karma positivo, denme (K´)arma negativ