c - 如何打印有关我的代码执行的数据?

标签 c haskell performance processing-efficiency memory-efficient

在使用 haskell 编程时,我们有解释器选项 :set +s。它会打印有关您运行的代码的一些信息。在 ghci 上时,打印运行代码所花费的时间和使用的字节数。在拥抱时,打印解释器减少的数量和使用的字节数。我怎样才能在 C 中做同样的事情?我知道如何打印运行我的 c 代码所花费的时间以及如何打印处理器运行它所花费的时钟数。但是字节数和减少量呢?我想知道一种比较两个做同样事情的不同代码并比较对我来说最有效的代码的好方法。 谢谢。

最佳答案

如果要比较性能,只需比较时间和使用的内存即可。允许两个程序利用相同数量的处理器内核,用两种语言编写等效程序并运行基准测试。如果您使用的是 Unix,time(1) 就是您的 friend 。

其他一切都与性能无关。如果一个程序执行的函数调用比另一个程序多 10 倍,但只用了一半的时间,它仍然是性能更好的程序。

benchmark game网站使用时间/空间标准比较不同的语言。您可能希望遵循同样的精神。

为了更仔细地分析部分程序,而不是整个程序,您可以使用分析器(在 C 中)或打开分析选项(在 GHC Haskell 中)。 Criterion也是一个流行的 Haskell 库,用于对 Haskell 程序进行基准测试。分析通常有助于发现代码中的“热点”:长时间运行的循环、频繁调用的函数等。这很有用,因为它允许程序员知道哪里需要优化。例如,如果一个函数累计运行 0.05 秒,那么获得 10 倍的速度提升远不如对一个累计运行 20 分钟的函数进行 5% 的优化有用(0.045 秒与 60 秒的增益)。

关于c - 如何打印有关我的代码执行的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25215523/

相关文章:

c - C %f 的 printf 在小数点后留下 6 个 0

c - 如何将负十六进制转换为十进制

haskell - 在haskell中为元组列表分配等级

haskell - 在 Haskell 中有效地解析 ASCII 文件

c - ARM 项目中的板支持库链接错误

c - "u16_t *"类型的参数与 "u16_t [2]*"类型的参数不兼容 - uIP 库

c# - List.Add vs HashSet.Add 用于 c# 中的小型集合

sql - 为给定 SQL 查询生成最坏情况数据的工具

haskell - 为什么 ContT 不能成为 MonadError 的实例?

c# - 创建一个方法以返回另一个方法的执行时间