程序性能的优化

本文探讨了现代编译器如何通过精妙的算法简化表达式并减少计算任务所需时间。以GCC为例,介绍了不同级别的优化选项(如O1、O2、O3),并讨论了这些选项对程序性能的影响及潜在的副作用。通过具体示例,说明了编译器如何进行安全优化,以及程序员如何编写更易于优化的代码。

    现代编译器使用精妙的算法去确定哪些变量需要去计算以及这些变量的怎么去使用, 这样就可以去简化表达式,减少某个计算任务所需要的时间。

    大部分的编译器,包括GCC,会给程序员一些接口去控制优化的程度,比如  GCC -O1 ,就是给程序一些基本的优化,当带上的参数为 O2, O3的时候,就会给程序更深层次的优化,它们在增强程序性能的同时,也可能会增加程序的大小以及将来debug的难度。


      编译器所做的优化,必须是“安全”的,就是说,优化前与优化后对任何可能情形的处理有着完全相同的行为。受到编译器“安全”优化的限制,我们程序员要写出更利于编译器去优化的代码。 为了领会这个说法,下面举个例子,思考下面,两个procedure


1 void twiddle1(int *xp, int *yp)
2 {
3    *xp += *yp;
4    *xp += *yp;
5 }

6 void twiddle2(int *xp, int *yp)
7 {
8    *xp += 2 * *yp;
9 }

第一眼看过去,这两个函数做的事情完全一样,都将yp的值取两次加到xp指向的位置,另一方面函数widdle2 运行起来,会更高效一些。它只需要三次引用(读或者写)内存,(读*xp, 读*yp, 写*xp). 但是 twiddle1 需要6次引用内存(两次读*xp, 两次读*yp, 两次写*xp).

所以,如果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值