代码移动
概念
代码移动(Code Motion)是将循环内部不依赖于循环变量的计算提取到循环外部,避免每次迭代都重复执行相同的计算。
示例
// 优化前:每次循环都调用strlen
for (int i = 0; i < strlen(s); i++) {
// ...
}
// 优化后:将strlen提到循环外
int len = strlen(s);
for (int i = 0; i < len; i++) {
// ...
}编译器限制
然而,编译器通常不能自动执行上述优化,因为 ——strlen 的调用结果可能被函数内部的修改所改变。编译器必须保守地假设最坏情况。
适用场景
- 循环不变量的计算
- 数组长度提取
- 常量表达式计算
- 不依赖循环变量的指针计算
相关笔记:
链接到
- 上一个知识点:5.1 普遍有用的优化
- 下一个知识点:5.3 复杂运算简化