股民赚40万销户,cohiba,海信招聘
我们写法式的目的便是使它在任何环境下都能够不乱工作。一个运行得很快然则效果错误的法式并没有任何用处。
在法式开发和优化的过程中,我们必需思量代码使用的方式,以及影响它的关键因素。
平日,我们必需在法式的简单性与它的运行速率之间做出权衡。本日我们就来聊一聊如何优化法式的性能。
一、减小法式较量量
1. 示例代码
2. 阐发代码
代码如上所示,外循环每执行一次,我们要进行一次乘法较量。i = 0,ni = 0;i = 1,ni = n;i = 2,ni = 2n。因此,我们能够把乘法换成加法,以n为步长,这样就减小了外循环的代码量。
3. 改进代码
较量机中乘法指令要比加法指令慢得多。
二、提代替码中的大众部门
1. 示例代码
想象一下,我们有一个图像,我们把图像透露为二维数组,数组元素代表像素点。我们想要获得给定像素的东、南、西、北四个邻居的总和。并求他们的均匀值或他们的和。代码如下所示。
2. 阐发代码
将以上代码编译后获得汇编代码如下所示,注意下3,4,5行,有三个乘以n的乘法运算。我们把上面的up和down展开后会发现四格表达式中都有i*n + j。因此,能够提取出大众部门,再通过加减运算分别得出up、down等的值。
3. 改进代码
改进后的代码的汇编如下所示。编译后只有一个乘法。削减了6个时钟周期(一个乘法周期大约为3个时钟周期)。
对于GCC编译器来说,编译器能够根据分歧的优化品级,有分歧的优化方式,会自动完成以上的优化操纵。下面我们先容下,那些必需是我们要手动优化的。
三、消除循环中低效代码
1. 示例代码
法式看起来没什么问题,一个很平常的巨细写转换的代码,然则为什么跟着字符串输入长度的变长,代码的执行时间会呈指数式增长呢?
2. 阐发代码
那么我们就测试下代码,输入一系列字符串。
lower1代码性能测试
本文地址:http://www.wbwb.net/bianchengyuyan/213125.html 转载请注明出处!