11.15
分析器是一个可以生成另外一个程序的执行时间的统计结果的程序。分析器可以输出一份
包含每个语句或函数的执行频度、每个函数的累积执行时间的报表。
许多编译器套件,如 Windows 上的 Visual Studio 和 Linux 上的 GCC 都带有分析器,可以
帮助我们找到程序中的热点。微软曾经只在价格昂贵的 Visual Studio 版本中提供了分析
器,但是自 Visual Studio 2015 社区版开始,微软开始向开发者提供免费的分析器。当然,
在 Windows 上还有其他开源的分析器以及对应早期的 Visual Studio 版本的分析器。
有几种方式可以实现一个分析器。一种可以同时支持 Windows 和 Linux 的方法如下。
(1) 程序员设置一个特殊的可以分析程序中所有函数的编译选项,重新编译一次程序,让
程序变为可分析的状态。这涉及在每个函数的开始和结束处添加一些额外的汇编语言
指令。
(2) 程序员将可分析的程序链接到分析库上。
(3) 每次这个可分析的程序运行时都会在磁盘上生成一张分析表(profiling table)。
(4) 分析器读取分析表,然后生成一系列可阅读的文字或图形报告。
另外一种分析方法是这样的。
(5) 通过将优化前的程序链接至分析库上使其变为可分析状态。分析库中的例程会以非常高
的频率中断程序的执行,记录指令指针的值。
(6) 每次可分析的程序运行时都会在磁盘上生成一张分析表。
(7) 分析器读取分析表,然后生成一系列可阅读的文字或图形报告。