2.2优化编译器的能力和局限性
写程序最主要的目标是使他在所有的可能的情况下都能正确工作。程序应该写出清晰简单的代码,主要为了给后期维护,起作用;但常常我们在程序的简单性,维护性,与程序的运行速度进行权衡; 高效的程序需要几类活动: (1)必须选择一组合适的算法和数据结构; (2)必须编写出编译器能够优化以转换成高效可执行的源代码,因此理解优化编译器的能力和局限性很重要,因此程序即使是很小的变动,会引起编译器优化方式很大的变化;因此程序员经常能够使编译器更容易产生高效代码的方式来编写他们的程序,对于C语言的指针,就编译器已经很难优化了; (3)并发编程,利用多处理器和多核的某种组合并行的计算; 现代编译器使用复杂精细的算法来确定一个程序中计算的是什么值,以及它们是如何使用的,然后利用一些机会来简化表达式,在几个不同的地方使用用一个计算,降低给定计算的执行次数;GCC编译器提供优化级别的控制,级别越高,程序的规模可能会提高,调试困难会提高;低级别的优化高效的C代码,要比高级别的优化初级的C代码性能要高; 要是编译器安全的优化,程序员必须花大力气编写编译器可以转换成有效的代码,举例如下: (1)*x += * y; *x += *y; 与(2)*x += 2 * *y; 这两个代码片段似乎有相同的行为;(2)要快一点,涉及3次存储器引用,而(1)涉及6次存储器引用,但是如果考虑*x = *y,则(1)会增加4倍的值