Измеряйте время выполнения дальше

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

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

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


person Kmssr    schedule 12.10.2019    source источник


Ответы (1)


Галочка ' будет анализировать текст сразу после вызова 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 возьмет токен из стека.

person Vlad    schedule 13.10.2019