测量执行时间

Kms*_*ssr 2 forth gforth

如何测量我的程序的执行时间?我发现了这个,但它对我不起作用,因为我的程序需要堆栈中的一些数字才能工作,所以我的程序和这个解决方案相互干扰(据我所知,因为当我尝试time: myfunctime: num1 num2 myfunc没有任何效果时......)

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

谢谢你的帮助

Vla*_*lad 6

勾号'将在调用 之后立即解析文本time:。所以对于带参数的调用应该是num1 num2 time: myfunc

此外,tick 将在运行时解析输入流。如果您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
Run Code Online (Sandbox Code Playgroud)

请注意,没有'调用 in timeEXECUTE它将从堆栈中获取令牌。