上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.3 什么是性能分析
你有过与同事就某一段代码的性能争论的经历吗?如果有过,那你肯定了解预测哪部分代码表现最优是一件多么困难的事。现代处理器中有非常多的变化组件,即使代码层面很小的改动都可能引发显著的性能变化。这就是为何本书给大家的第一个建议是:一定要测量。
个人经验 我看到不少人依赖直觉来优化应用程序,他们通常在这里或那里进行随机的修复,最后却对应用程序性能没有任何实质性的影响。
经验不丰富的开发者经常修改代码,希望提升性能。例如,设想i的前一个值不会被使用,从而把i++替换成++i。这种改变通常没有任何实质效果,因为每一个合格的编译器都能识别出i的前一个值没有被使用,并且无论如何都会去除冗余的数据。
许多过去广泛流传的有效优化小技巧,已经被现代编译器学会了。此外,有些人会过度使用传统的位处理技巧,其中一个例子是使用基于XOR的变量交换,但实际上,简单的std::swap就能产生更快的代码。这些随机修改可能并不会提升应用程序的性能,正确找到需要修改的位置需要进行仔细的性能分析,而不是依靠直觉和猜测。
业界有许多性能分析方法论[12],但它们并不是总能帮助你找到方向。本书中介绍的专门针对CPU的性能分析方法有一个共同点:它们都需要收集程序运行的某些信息。程序源代码中的任何修改,都是根据对收集到的数据进行分析得出的。
定位性能瓶颈只是工程师工作的一半,而另一半工作是用合理的方法解决它。有时,改变一行程序源代码就会显著地提升程序性能。性能分析和性能优化就在于找到这一行代码并进行修改!