当您使用递归函数分析代码时,决定如何累积在callees中花费的时间直到他们的调用者变得棘手。如果您分析以下代码(Lua):
function a(n)
wait(10)
if n > 0 then
a(n-1)
end
end
a(1)
并且,为了进行分析,只有行wait(10)
需要花费时间,应该将哪个子时间归因于行a(n-1)
?
配置文件的两个不错的属性是:
os.clock()
(或等效的)如果a(n-1)
的子时间为0,则得到(1),但不得(2)。如果a(n-1)
的子时间为10,则得到(2),但不得得(1)。
我读过,但可能不理解,this paper about gprof。据我所知,他们同意这是一个棘手的问题,他们的解决方案会给a(n-1)
一个0的孩子时间。我不确定它如何在a()
调用{b()
的情况下起作用a()
1}}调用{{1}}。
有没有人能够了解0或10是否是更好的答案?为什么?或者,更好的是,有另一个解决方案,尊重(1)和(2)?