在haskell中编程时,我们有解释器选项:set + s。它会打印一些有关您运行的代码的信息。在ghci上时,打印运行代码所花费的时间和使用的字节数。在拥抱时,打印解释器所做的减少次数和使用的字节数。我怎么能用C做同样的事情?我知道如何打印运行我的代码所花费的时间以及如何打印处理器运行它所花费的时钟数。但是字节数和减少量呢?我想知道一个比较两个不同代码的好方法,它们做同样的事情并比较哪个代码对我来说最有效。 感谢。
答案 0 :(得分:3)
如果要比较性能,只需比较时间和已用内存。允许两个程序使用相同数量的处理器内核,用两种语言编写等效程序并运行基准测试。如果您使用的是Unix,time(1)
是您的朋友。
其他一切与表现无关。如果一个程序执行的函数调用比另一个函数多10倍,但是在一半的时间内运行,它仍然是具有更好性能的函数。
benchmark game网站使用时间/空间标准比较不同的语言。你可能希望遵循同样的精神。
为了更仔细地分析程序的某些部分,而不是整个程序,您可以使用分析器(在C中)或打开分析选项(在GHC Haskell中)。 Criterion也是一个流行的Haskell库,用于对Haskell程序进行基准测试。分析通常有助于发现代码中的“热点”:长时间运行的循环,经常调用的函数等。这很有用,因为它允许程序员知道需要优化的位置。例如,如果一个函数累计运行0.05秒,那么获得10倍的速度增加远不如累积运行20分钟的函数的5%优化(0.045秒对60秒增益)。