什么是性能分析?

你有没有遇到过与同事争论某段代码性能的情况?如果有,你大概知道预测哪段代码执行效果最好有多困难。由于现代处理器内部有如此多的运动部件,即使是对代码的微小调整也可能引发显著的性能变化。在优化应用程序时依赖直觉,通常会导致随机的"修复"而没有实质性的性能提升。

缺乏经验的开发者有时会修改代码并声称它应该运行得更快。一个典型例子是在整个代码库中将 i++(后自增)替换为 ++i(前自增)(假设 i 的旧值未被使用)。在一般情况下,这个改动对生成的代码毫无影响:每个优秀的优化编译器都会识别出 i 的旧值未被使用,并消除多余的拷贝操作。本书给你的第一条建议是:不要仅凭直觉。始终进行测量。

许多流传于世的微优化(micro-optimization)技巧在过去是有效的,但现代编译器早已掌握了这些技巧。此外,有些人倾向于过度使用古老的位操作技巧,XOR 交换惯用法2就是一例。实际上,简单的 std::swap 会产生等效甚至更快的代码。这类随意的改动很可能不会提升应用程序的性能。找到正确的调优点应该是仔细进行性能分析的结果,而不是直觉或猜测。

性能分析(performance analysis)是一个收集程序执行信息并加以解释以发现优化机会的过程。对程序源代码所做的任何修改,都应以分析和解读收集到的数据为驱动。我们将向你展示如何使用性能分析技术,即使在庞大而陌生的代码库中也能发现优化机会。性能分析方法论有很多种,针对不同问题,某些方法会比其他方法更有效。随着经验的积累,你将形成自己的策略,知道何时使用哪种方法。

2. 基于 XOR 的交换惯用法 - https://en.wikipedia.org/wiki/XOR_swap_algorithm

results matching ""

    No results matching ""