В программах иногда используются "бесконечные" циклы с заранее неизвестным числом повторений (может быть реализован выход из цикла по проверке некоторых условий, этот момент я не трогаю).
Как правило для зацикливания в таких случаях используется GOTO назад, например:
1 REM
10 REM
100 REM
199 GOTO234
200 REM
234 REM
999 GOTO199
basic 2.5 - 7900 тактов на итерацию
basic 2.996 - 4100 тактов на итерацию
Можно ускорить подобные циклы используя FOR:
1 REM
10 REM
100 REM
199 FORI=.TO1STEP.:GOTO234
200 REM
234 REM
999 GOTO199 - ошибка, в этой строке должно быть 999 NEXT
basic 2.5 - 5760 тактов на итерацию
basic 2.996 - 2828 тактов на итерацию
Выигрыш очевиден, причем если перед строкой начала цикла (199 в примере) будет больше других строк, то вариант с GOTO будет еще замедляться, а на FOR это не влияет.
В модернизированных бейсиках есть еще один потенциальный плюс - FOR не перебивает кеширование переходов, если они используются и внутри цикла, как в приведенном примере (поэтому в 2.996 относительный выигрыш больше).




Ответить с цитированием