Frage

Die folgenden zwei (funktional äquivalent) Programme werden von einer alten Ausgabe von Compute Gazette genommen. Der Hauptunterschied ist, dass das Programm 1 legt die Ziel-Basisspeicherstellen (7680 und 38400), in-line, während Programm 2 ordnet sie zuerst auf eine Variable.

Programm 1 laufen etwa 50% langsamer als Programm 2. Warum? Ich würde denken, dass die zusätzliche variable Abrufzeit hinzufügen würde, ist es nicht abziehen!

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

Programm 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

Programm 2

War es hilfreich?

Lösung

Der Grund dafür ist, dass BASIC voll hier interpretiert wird, so dass die Saiten „7680“ und „38400“ Notwendigkeit, binäre Zahlen EVERY TIME Linie umgewandelt werden 20 erreicht ist (506-mal in diesem Programm). Im Programm 2, werden sie umgewandelt einmal und in B gespeichert. Solange die Suche-nach-und-Abruf von B ist schneller als convert-String-Binär-Programm 2 wird schneller sein.

Wenn Sie waren ein BASIC-Compiler verwenden (nicht sicher, ob man für VIC-20 vorhanden ist, aber es wäre eine coole Retro-Programmierung Projekt sein), dann werden die Programme wahrscheinlich die gleiche Geschwindigkeit sein würde, oder vielleicht 1 könnte leicht sein schneller, je nachdem, was der Compiler-Optimierungen haben.

Andere Tipps

Es ist ab Seite 76 dieser Ausgabe: http : //www.scribd.com/doc/33728028/Compute-Gazette-Issue-01-1983-Jul

Ich habe dieses Magazin zu lieben. Er sagt tatsächlich eine 30% ige Verbesserung. Schauen Sie, was in Programm passiert 2 und es wird klar, weil man viel sind Looping das Programm Variablen tut alle die Speicherzuordnung im Voraus zu berechnen Speicheradressen. Wenn Sie den langsamen Ansatz tun hat jede Iteration Speicher für die markiert unten als Teil zuzuordnen Adresse der Berechnung aus dem Speicher:

POKE 7680 + A, 81: POKE 38400 + A

Das ist nur die Art des BASIC-Interpreter auf dem VIC.

wird die erste definierte Variable Zugriff auf schnell sein; die zweite wird ein wenig langsamer, usw. Parsing mehrstellige Konstanten erfordert den Interpreter sein, um wiederholte Multiplikation mit zehn zuführen. Ich weiß nicht, was die genauen Abwägungen zwischen Variablen und Konstanten, aber kurzen Variablennamen verwenden weniger Platz als mehrstellige Konstanten. Im übrigen kann die Konstante Null mehr analysiert kann schnell, wenn sie als einzelnes Komma geschrieben (ohne Ziffern) als Null als Ziffer geschrieben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top