Переменная замена быстрее, чем In-Line Integer в Vic-20 Basic?

StackOverflow https://stackoverflow.com/questions/3568967

  •  01-10-2019
  •  | 
  •  

Вопрос

Следующие два (функционально эквивалентные) программы взяты из старого выпуска газеты Compute. Основное отличие состоит в том, что программа 1 ставит целевые базовые местоположения памяти (7680 и 38400), тогда как программа 2 назначает их переменную первым.

Программа 1 работает около 50% медленнее, чем программа 2. Почему? Я бы подумал, что дополнительный переменную поиск добавят время, а не вычтите его!

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 будет быстрее, чем конвертирующая строка в двоичный, программа 2 будет быстрее.

Если бы вы использовали базовый компилятор (не уверены, если кто-то существует для VIC-20, но это будет прохладный проект по программированию ретро), то программы, вероятно, будут одинаковыми скоростью, или, возможно, 1 могут быть немного быстрее, в зависимости от На какие оптимизации делали компилятор.

Другие советы

Это от страницы 76 этой проблемы: http://www.scribd.com/doc/33728028/compute-gazette-iussue-01-1983-jul.

Я любил этот журнал. Это на самом деле говорит о повышении 30%. Посмотрите на то, что происходит в программе 2, и становится понятно, поскольку вы много зацикливаетесь, используя переменные, программа выполняет все выделение памяти, чтобы рассчитать адреса памяти. Когда вы делаете более медленный подход, каждая итерация должна выделить память для выделенных ниже как часть расчета адреса памяти:

Покнуть 7680+ А, 81: тыка 38400+ А.

Это просто природа базового переводчика в Вик.

Доступ к первому определенной переменной будет быстро; Второе будет немного медленнее и т. Д. Разборные многозначные константы требуют переводчика для выполнения повторного умножения на десять. Я не знаю, какие точные компроминки между переменными и константами, но короткие имена переменных используют меньше места, чем многозначные константы. Кстати, постоянный ноль может быть проанализирован быстрее, если она написана как одна десятичная точка (без цифр), чем записать нулю в виде цифры.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top