El botón, la barra y la caja.

Started by Fede, May 09, 2010, 07:05:17 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Fede

A ver si lo voy pillando.

Cuando defino una variable como local ¿afecta sólo a ese proceso y a sus descendientes, o a todos los procesos del programa?

¿Sobrecargar? ¿Cuanto? ¿Cómo? Si esiste LOCAL es para utilizarlo ¿No? ¿Tanto sobrecarga?

Y por último, y visto que me habeis preocupado, ¿Donde me informo/aprendo sobre el uso conveniente de las variables locales?

Saludos.
Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

SplinterGU

#16
es al reves, local es para todos los procesos, public solo para el que la define.

me alegra que te guste bennu.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Definición básica: una variable LOCAL es una variable que se declara una sóla vez, pero se crea una por proceso (como lo son GRAPH, X, Y, ALPHA...) y son legibles desde cualquier punto del programa mediante el ID del proceso al que queremos acceder, un punto, y el nombre de su variable (FATHER.X, SON.GRAPH, id_proceso.ALPHA...).
Su ventaja es esa, que se puede leer desde fuera de los procesos, y que hay una por cada uno de ellos (lo cual es interesante por si no sabemos cuantos procesos "enemigo" vamos a tener para consultar su "energía").
Su problema es que TODOS los procesos tienen dicha variable. Podemos crear una que se llame "puntos" para que cada jugador vea los que ha conseguido pero ¿qué utilidad tiene eso en los enemigos, el control del teclado o los procesos del menú? ellos también tendran su propia variable "puntos", lo que es un gasto inútil de memoria.

Espero que haya quedado un poco más claro.
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)

Fede

Gracias compañeros, me lo apunto.

Las locales hacen justamente lo que pensaba, sólo que no había tenido en cuenta su uso masivo.

Tendré que tener más en cuenta los recursos.
Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

Windgate

En su día hice unas pruebas de eficiencia invocando 32K procesos sin usar LOCAL y luego usando unas 16 variables LOCAL de tipo int.

El juego era en 3D y ya de por sí consumía mucha memoria y CPU, así que el hecho de usar LOCAL o no usarlas era inapreciable, no noté ni tan si quiera un 1% de diferencia de rendimiento.

En cualquier caso, para juegos 2D, por ejemplo para Wiz donde los recursos del sistema hay que cuidarlos sí que puede llegar a influir, te recomiendo hacer alguna prueba de ejecución con y sin LOCAL, y comprobar la memoria y CPU consumida y máximo FPS que obtienes.
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

Drumpi

Hombre, ten en cuenta que una variable tipo INT ocupa 4bytes por cada proceso, suponiendo una cosa muy bestia (como hago yo de vez en cuando), por ejemplo, 1000 procesos, sería un total de 4KB de RAM, no me lo compares con 32MB que puedes gastar fácilmente con un par de FPGs con fondos y una canción en OGG con varios WAVs.
Pero claro, en máquinas limitadas, el uso de locales se nota más.

Tambien creo que huelga decir que aquí la CPU no pinta nada, lo mismo se tarda en acceder a un tipo de variable que a otra.
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)