Время выполнения измерения - PullRequest
0 голосов
/ 13 октября 2019

Как измерить время выполнения моей программы? Я нашел это, но это не работает для меня, потому что моей программе нужны некоторые числа в стеке, чтобы моя программа и это решение взаимодействовали друг с другом (как я понимаю, потому что, когда я пытаюсь time: myfunc или time: num1 num2 myfunc, ничего не работает....)

: time: ( "word" -- )
  utime 2>R ' EXECUTE
  utime 2R> D-
  <# # # # # # # [CHAR] . HOLD #S #> TYPE ."  seconds" ;

спасибо за любую помощь

1 Ответ

2 голосов
/ 13 октября 2019

Тик ' будет анализировать текст сразу после вызова на time:. Так что для вызова с аргументами это должно быть num1 num2 time: myfunc

Кроме того, эта галочка будет анализировать входной поток во время выполнения. Если у вас есть вызов time:, встроенный в определение слова, он попытается получить метку выполнения для слова из входного потока, а не для слова, следующего сразу за time:. Используйте ['], чтобы получить xt следующего слова во время компиляции, и передайте это xt в качестве аргумента time:

: time ( xt -- )
  utime 2>R EXECUTE
  utime 2R> D-
  <# # # # # # # [CHAR] . HOLD #S #> TYPE ."  seconds" ;

: foo 0 1000000 0 do i + loop drop ;

: bar num1 num2 ['] foo time ; \ pass the foo's xt as argument to time

Обратите внимание, что в time нет вызова 'EXECUTE будет извлекать токен из стека.

...