La sustitución de variables más rápido que el número entero en línea en Vic-20 básico?

StackOverflow https://stackoverflow.com/questions/3568967

  •  01-10-2019
  •  | 
  •  

Pregunta

Los dos programas siguientes (funcionalmente equivalentes) se toman de un viejo problema de la Gaceta de cómputo. La principal diferencia es que el programa 1 pone las posiciones de memoria base de destino (7680 y 38400) en línea, mientras que el programa 2 les asigna a una variable primero.

Programa 1 corre alrededor de 50% más lento que el programa 2. ¿Por qué? Me gustaría pensar que la recuperación de la variable adicional añadiría tiempo, no restar él!

10 PRINT"[CLR]":A=0:TI$="000000"
20 POKE 7680+A,81:POKE 38400+A,6:IF A=505 THEN GOTO 40
30 A=A+1:GOTO 20
40 PRINT TI/60:END

Programa 1

10 PRINT "[CLR]":A=0:B=7600:C=38400:TI$="000000"
20 POKE B+A,81:POKE C+A,6:IF A=505 THEN GOTO 40
30 A=A+1:GOTO 20
40 PRINT TI/60:END

Programa 2

¿Fue útil?

Solución

La razón es que BÁSICO está totalmente interpreta aquí, por lo que las cadenas "7680" y necesidad "38400" que se convierten en enteros binarios se alcanza la línea CADA VEZ 20 (506 veces en este programa). En el programa 2, una vez que están convertidos y almacenados en B. Así que, mientras la búsqueda-de-y-fetch de B es más rápido que convertir-cadena a binario, el programa 2 será más rápida.

Si se va a utilizar un compilador BASIC (no estoy seguro si es que existe para VIC-20, pero sería un proyecto de programación retro fresco), entonces los programas probablemente serían la misma velocidad, o tal vez 1 podrían ser ligeramente más rápido, dependiendo de lo que el compilador optimizaciones lo hizo.

Otros consejos

Es a partir de la página 76 de este número: http : //www.scribd.com/doc/33728028/Compute-Gazette-Issue-01-1983-Jul

Me encantaba esta revista. En realidad, dice una mejora del 30%. Mira lo que está pasando en el programa 2 y se pone de manifiesto, ya que se recorre una gran cantidad de variables utilizando el programa está haciendo todo por adelantado la asignación de memoria para calcular las direcciones de memoria. Cuando lo hace el enfoque más lento cada iteración tiene que asignar memoria para el puesto de relieve a continuación como parte del cálculo de la dirección de memoria:

POKE 7680 + A, 81: POKE 38400 + A

Esto es sólo la naturaleza de la intérprete de BASIC en el CIV.

Acceso a la variable primera definido será rápido; la segunda será un poco más lento, etc. constantes de varios dígitos de análisis sintáctico requiere el intérprete para llevar a cabo la multiplicación repetida por diez. No sé cuáles son las ventajas y desventajas son exactas entre las variables y constantes, pero los nombres de variable a corto utilizo menos espacio que las constantes de varios dígitos. Por cierto, el cero constante puede ser analizada más rápidamente si escrito como un solo punto decimal (sin dígitos) que escribe como un dígito de cero.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top