以下两个(功能等效)程序取自Compute的公报的旧问题。主要区别在于,程序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

有帮助吗?

解决方案

原因是这里完全解释了基本,因此每次达到第20行(在此程序中,每次506次),需要将“ 7680”和“ 38400”的字符串转换为二进制整数。在程序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上基本解释器的本质。

访问第一个定义的变量将很快;第二个将有点慢,等等。解析多位数常数要求解释器将重复的乘法执行十。我不知道变量和常数之间的确切权衡是什么,但是简短的变量名称所使用的空间比多数位数常数少。顺便说一句,如果写为单个小数点(没有数字),则可以更快地解析常数零。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top