質問

次の2つの(機能的に同等の)プログラムは、Compute's Gazetteの古い号から取得されています。主な違いは、プログラム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

役に立ちましたか?

解決

その理由は、基本がここで完全に解釈されているため、文字列「7680」と「38400」は、ライン20に到達するたびにバイナリ整数に変換する必要があるためです(このプログラムでは506回)。プログラム2では、それらは一度変換され、 B. 。したがって、検索とフェッチがある限り B コンバージョンストリングからバイナリよりも高速で、プログラム2はより高速になります。

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

他のヒント

この問題の76ページからのものです。 http://www.scribd.com/doc/33728028/compute-gazette-issue-01-1983-jul

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

ポーク 7680+A、81:ポケ 38400+a

これは、vic上の基本的な通訳の性質です。

最初に定義された変数にアクセスすると高速になります。 2番目は少し遅いなどです。マルチ桁の定数を解析するには、通訳者が10倍の繰り返し乗算を実行する必要があります。変数と定数の間に正確なトレードオフが何であるかはわかりませんが、短い変数名は複数桁の定数よりも少ないスペースを使用します。ちなみに、一定の小数点(数字なしで)として書かれた数字ゼロとして書かれている場合、定数ゼロはより速く解析される場合があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top