La substitution des variables plus rapide que nombre entier en ligne à Vic-20 de base?

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

  •  01-10-2019
  •  | 
  •  

Question

Les deux programmes (fonctionnellement équivalents) suivants sont pris d'un ancien numéro de la Gazette de Compute. La principale différence est que le programme 1 met les emplacements de mémoire de base cibles (7680 et 38400) en ligne, alors que le programme 2 les affecte à une variable premier.

Programme 1 fonctionne environ 50% plus lent que le programme 2. Pourquoi? Je pense que la récupération variable supplémentaire ajouterait le temps, pas le soustraire!

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

Programme 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

Programme 2

Était-ce utile?

La solution

La raison en est que BASIC est entièrement interprété ici, donc les chaînes « 7680 » et « 38400 » doivent être convertis en entiers binaires ligne CHAQUE FOIS 20 est atteint (506 fois dans ce programme). Dans le programme 2, ils sont convertis une fois stockés dans B. Donc, tant que la recherche-pour-et-fetch de B est plus rapide que convertir chaîne à binaire, programme 2 sera plus rapide.

Si vous deviez utiliser un compilateur BASIC (pas sûr si l'on existe pour VIC-20, mais ce serait un projet de programmation rétro cool), alors les programmes seraient probablement la même vitesse, ou peut-être 1 pourrait être légèrement plus rapide, en fonction de ce que les optimisations du compilateur fait.

Autres conseils

Il est de la page 76 de ce numéro: http : //www.scribd.com/doc/33728028/Compute-Gazette-Issue-01-1983-Jul

Je l'habitude d'aimer ce magazine. Il dit en fait une amélioration de 30%. Regardez ce qui se passe dans le programme 2 et il devient clair, parce que vous Looping beaucoup en utilisant des variables du programme fait tout l'avance d'allocation de mémoire pour calculer les adresses mémoire. Lorsque vous faites l'approche plus lente chaque itération doit allouer de la mémoire pour la surbrillance ci-dessous dans le cadre du calcul l'adresse de mémoire:

POKE 7680 + A, 81: POKE 38400 + A

Ceci est juste la nature du BASIC interprète sur le CIV.

Accès à la première variable définie sera rapide; le second sera un peu plus lent, etc. constantes à plusieurs chiffres Parsing nécessite l'interprète d'effectuer une multiplication répétée par dix. Je ne sais pas ce que les compromis sont exactes entre les variables et les constantes, mais les noms courts variables utilisent moins d'espace que les constantes à plusieurs chiffres. Soit dit en passant, le zéro constant peut être analysé plus rapidement si elle était écrite en un seul point décimal (sans chiffres) qu'écrite comme chiffre zéro.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top