C 循环优化实战
更新时间:2026-10-01。循环是热点主体,但很多“经典手法”编译器已自动完成,手动优化要剖析驱动。
一、常用手法
- 不变量外提:循环内不变化的计算/访存移到外面。
- 强度削减:昂贵运算换廉价(乘法递推为加法)。
- 展开:减少分支、暴露指令级并行。
- 分块/交换:改善嵌套循环的缓存局部性。
- 循环合并:减少重复遍历。
二、纪律

内存受限循环做展开无用,应改布局/分块;过度展开会使代码膨胀、i-cache miss 上升。
三、常见坑
- 手动展开编译器本来做的事。
- 在非热循环上耗时。
- 优化后不测量,甚至变慢。
小结
总结
循环优化(不变量外提、强度削减把乘变加、展开减分支暴露 ILP、循环交换/分块改善局部性、循环合并)大多现代编译器已自动完成,所以手动优化必须剖析驱动:先用 perf 定位热循环、判断它是计算受限还是内存受限,再对症下手——内存受限做展开毫无用处、应改布局/分块,过度展开反而膨胀代码抬高 i-cache miss——最后用 perf 验证收益,让人专注算法与局部性,把机械变换交给编译器。