程序性能的衡量一般有2种方式:Benchmarking和Profiling。
Benchmarking通过绝对运行时间来比较程序的整体性能,例如给定一组同样的输入,比较不同版本的程序在同样硬件环境下的运行时间,或者比较相同版本程序在不同硬件环境下的运行时间。
Profiling通常用来识别程序的耗时瓶颈(通常是一些函数),优化这些瓶颈后再去做Benchmarking评估整体性能。
Unix系统提供了GPROF工具,CSAPP上有一个示例:
gcc -Og -pg prog.c -o prog
-Og
表示关闭了很多编译器的优化开关,并且优化了调试信息;-pg
表示产生供GPROF剖析用的可执行文件。./prog file.txt
gmon.out
。gprof prog
find_ele_rec
为例:insert_string
调用了965027次,insert_string
自己递归调用了965027次;后几行显示了find_ele_rec
调用其他函数的情况。由于GPROF采用的是interval counting,所以计时可能不太精确,尤其对于运行时间小于1s的程序误差更大。
如何使用Profiling去优化程序,CSAPP上给了一个非常精彩的例子,这里不再赘述。
原文:https://www.cnblogs.com/EIMadrigal/p/14164758.html