代码之家  ›  专栏  ›  技术社区  ›  G__

变量替换比Vic-20 basic中的内联整数快?

  •  3
  • G__  · 技术社区  · 14 年前

    程序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
    

    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

    3 回复  |  直到 14 年前
        1
  •  2
  •   Chris Dodd    14 年前

    原因是BASIC在这里是完全解释的,所以字符串“7680”和“38400”需要在每次到达第20行时转换为二进制整数(在这个程序中是506次)。在程序2中,它们被转换一次并存储在 B . 所以只要寻找和获取 B类

        2
  •  2
  •   Keith Adler    14 年前

    来自本期第76页: http://www.scribd.com/doc/33728028/Compute-Gazette-Issue-01-1983-Jul

    我以前很喜欢这本杂志。实际上它说有30%的改善。看看在程序2中发生了什么,它变得很清楚,因为你在循环使用变量很多,程序正在做所有的内存分配预先计算内存地址。当您执行较慢的方法时,每个迭代都必须为下面突出显示的对象分配内存,作为计算内存地址的一部分:

    7680 +A、 81:戳

        3
  •  0
  •   supercat    12 年前

    访问第一个定义的变量会很快;第二个会稍慢一些,等等。解析多位常量需要解释器执行10的重复乘法。我不知道变量和常量之间的确切折衷是什么,但是短变量名使用的空间比多位数常量少。顺便说一句,如果将常量0写成一个小数点(没有数字),则解析它的速度可能比将其写成数字0更快。