如何把C语言for循环用循环展开技术优化?

如何把C语言for循环用循环展开技术优化?,第1张

循环展开可以减少循环的次数,对程序的性能带了两方面的提高。一是减少了对循环没有直接贡献的计算,比如循环计数变量的计算,分支跳转指令的执行等。二是提供了进一步利用机器特性进行的优化的机会。

通过循环展开,每次迭代将累加4个元素,减少了循环次数,从而减少了总的执行时间(单独使用这种优化方法,对浮点数累乘几乎没有提高,但是整数累乘得益于编译器的重关联代码变化会有大幅度提高)。

这种优化可以直接利用编译器完成,将优化level设定到较高,编译器会自动进行循环展开。使用gcc,可以显式使用-funroll-loops选项。

所谓循环就是指一系列重复的的 *** 作(有规律可循)

for 循环 和do while循环都可以优化变成的代码;

我举个简单点的例子,比如你要把A1的值赋值给A2-A100中(当然这用不到VBA,我只是举个简单例子)

for i= 2 to 100 step 1

cells(i,1).value=cells(1,1).value

next i

这个就是for 循环

i=2

do while i<101

cells(i,1)=cells(1,1).value

i=i+1

loop

这个就是do while 循环

当然这是最简单的例子,真实的循环中一般都是伴随着各种参数 ,模块变量 循环的嵌套 判断的嵌套。总而言之循环就是对重复机械的动作进行优化的。

先尝试优化程序的时间复杂度,寻找更有效的算法

确保了算法复杂度在可接受范围之内后,开始进行常数优化,以下是Python优化的几个小技巧:

实测表明,for语句一般比while语句效率更高

同样实测表明,xrange一般比range要高效

如果要存储动态数据(即有可能频繁变动的数据)少用list和str,多用dict

实测表明,

两个str的连接效率从高到低+=,join,+

多个str的连接效率从高到低join,+=,+

尽可能使用列表解析表达式和生成器表达式代替循环一遍来构建list

避免使用global关键字,无论是从代码效率还是可移植性的方面考虑


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7866616.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存