以下两个(功能相当的)程序取自旧版的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
答案 0 :(得分: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口译员的性质。
答案 1 :(得分:2)
原因是这里完全解释了BASIC,因此每次到达第20行时,字符串“7680”和“38400”需要转换为二进制整数(在此程序中为506次)。在程序2中,它们被转换一次并存储在B
中。因此,只要B
的搜索和获取速度比convert-string-to-binary快,程序2就会更快。
如果您要使用BASIC编译器(不确定VIC-20是否存在,但它是一个很酷的复古编程项目),那么程序的速度可能相同,或者可能是1更快,取决于编译器的优化程度。
答案 2 :(得分:0)
访问第一个定义的变量会很快;第二个会慢一点,等等。解析多位数常量需要解释器重复乘以10。我不知道变量和常量之间的确切折衷是什么,但是短变量名称比多位常量使用更少的空间。顺便提一下,如果写为单个小数点(没有数字)而不是写为数字零,则可以更快地解析常数零。