优化程序性能(CSAPP:5)
Posted FireLightning
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优化程序性能(CSAPP:5)相关的知识,希望对你有一定的参考价值。
【前言】虽然现在没有接触过大型项目,但是工作了会注重性能。学习一下,应该能更好更快的理解别人写的经典优秀的代码。结合CSAPP和自己的理解,总结一下。
一、程序优化综述
1、高效程序的特点
(1)适当的算法和数据结构。方法和数据的组织形式无疑是最关键的,是优化的基础;
(2)代码能够被编译器转化成高效的可执行代码。需要深入了解使用的编译器的优化方法,和常见的优化策略;
(3)运用现代并行编程技术。多核以及硬件支持提供更大的加速可能,例如GPU;
2、优化程序的一般步骤
(1)消除不必要的工作,例如消除不必要的函数调用(加大栈区负担),条件测试和内存引用;
(2)利用处理器提供的指令级并行能力,同时执行多条指令;指令级并行介于线程级并发和单指令多数据并行之间,一个处理器可实现多指令执行,例如流水线技术;
(3)优化关键路径。就是反复执行的数据和代码;
二、优化编译器的能力和局限性
我们可以使用-O1、-O2、-O3来指定编译器的优化级别,级别越高可能会增加程序的规模。注意一点,优化级别高一般比级别低的性能好,肯定比原始未优化的好!但是,编译器在优化时会考虑安全问题,如果优化一定会在安全范围内优化,有一个条件不满足就会放弃某模块的优化。
例如:
1 { 2 *y += *x; 3 *y += *x; 4 } 5 //上面的代码会被优化为下面吗? 6 { 7 *y += 2* *x; 8 }
不会,虽然适用一般情况y=y+2x。但是,当x=y时:y=4x 不是3x。编译器会考虑所有特殊情况,保证安全。还有一种情况,是内存别名使用的时候两个变量值不同,但是指针地址有可能相同。也不会优化.
函数调用也会妨碍优化,此时就是用内联函数优化了。避免频繁出栈入栈。
以上是关于优化程序性能(CSAPP:5)的主要内容,如果未能解决你的问题,请参考以下文章