3

次の2つの(機能的に同等の)プログラムは、Compute'sGazetteの古い号から抜粋したものです。主な違いは、プログラム1がターゲットのベースメモリ位置(7680と38400)をインラインに配置するのに対し、プログラム2はそれらを最初に変数に割り当てることです。

プログラム1の実行速度はプログラム2よりも約50%遅くなります。なぜですか。余分な変数の取得は、それを差し引くのではなく、時間を加えると思います!

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

プログラム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

プログラム2

4

3 に答える 3

2

この号の76ページからです:http ://www.scribd.com/doc/33728028/Compute-Gazette-Issue-01-1983-Jul

私はこの雑誌が大好きでした。実際には30%の改善が見られます。プログラム2で何が起こっているかを見ると、変数を使用して多くのループを実行しているため、プログラムはメモリアドレスを計算するためにすべてのメモリ割り当てを事前に実行していることが明らかになります。より遅いアプローチを行う場合、各反復は、メモリアドレスの計算の一部として、以下で強調表示されているメモリを割り当てる必要があります。

POKE 7680 + A、81:POKE 38400 + A

これは、VICのBASICインタープリターの性質にすぎません。

于 2010-08-25T18:21:33.833 に答える
2

その理由は、BASICがここで完全に解釈されるため、文字列「7680」と「38400」を20行目に到達するたびに(このプログラムでは506回)2進整数に変換する必要があるためです。プログラム2では、一度変換されてに保存されBます。の検索とフェッチが文字列からバイナリへの変換よりも高速である限りB、プログラム2の方が高速になります。

BASICコンパイラを使用する場合(VIC-20用に存在するかどうかはわかりませんが、クールなレトロプログラミングプロジェクトになります)、プログラムは同じ速度になる可能性があります。コンパイラが行った最適化について。

于 2010-08-25T18:39:01.780 に答える
0

最初に定義された変数へのアクセスは高速になります。2番目は少し遅くなります。など。複数桁の定数を解析するには、インタプリタが10を繰り返し乗算する必要があります。変数と定数の間の正確なトレードオフはわかりませんが、短い変数名は複数桁の定数よりも少ないスペースを使用します。ちなみに、定数ゼロは、小数点以下1桁(数字なし)で記述した場合、数字ゼロとして記述した場合よりも高速に解析される可能性があります。

于 2010-10-02T19:43:52.187 に答える