C 语言性能优化:循环展开
概念:在 C 语言中,循环展开技术是一种提升程序执行速度的非常有效的优化方法,它可以由程序员手工编写,也可由编译器自动优化。循环展开的本质是,利用 CPU 指令级并行,来降低循环的开销,当然,同时也有利于指令流水线的高效调度。
例程:举一个最简单的例子,一个 100 次的循环:
复制代码
循环展开的写法如下:
复制代码
注意,这里递增步长 i += 2,就是说,循环次数从原来的 100 次,减少为循环 100/2 = 50 次了。
循环展开的优点:
第一,减少了分支预测失败的可能性。
第二,增加了循环体内语句并发执行的可能性,当然,这需要循环体内各语句不存在数据相关性。
循环展开的缺点:
第一,造成代码膨胀,导致 ELF 文件(或 Windows PE 文件)尺寸增大。
第二,代码可读性显著降低,前一个人写的循环展开代码,很可能被不熟悉的后续维护人员改回去。
附 1:例程循环展开前的汇编代码
附 2:例程展开后的汇编代码
评论