技巧一:减少循环体内的计算
- 优化前代码:
#include <iostream>
int main() {
int sum = 0;
for (int i = 1; i <= 1000000; ++i) {
sum += i * 2 / 2; // 这里存在不必要的乘除计算
}
std::cout << "Sum: " << sum << std::endl;
return 0;
}
- 优化后代码:
#include <iostream>
int main() {
int sum = 0;
for (int i = 1; i <= 1000000; ++i) {
sum += i; // 去掉不必要的乘除计算
}
std::cout << "Sum: " << sum << std::endl;
return 0;
}
技巧二:使用寄存器变量(现代编译器优化下效果可能不明显,但原理有参考价值)
- 优化前代码:
#include <iostream>
int main() {
int sum = 0;
for (int i = 1; i <= 1000000; ++i) {
sum += i;
}
std::cout << "Sum: " << sum << std::endl;
return 0;
}
- 优化后代码:
#include <iostream>
int main() {
int sum = 0;
register int i; // 尝试将循环变量放入寄存器
for (i = 1; i <= 1000000; ++i) {
sum += i;
}
std::cout << "Sum: " << sum << std::endl;
return 0;
}
技巧三:循环展开
- 优化前代码:
#include <iostream>
int main() {
int sum = 0;
for (int i = 1; i <= 1000000; ++i) {
sum += i;
}
std::cout << "Sum: " << sum << std::endl;
return 0;
}
- 优化后代码(简单展开示例,展开倍数为4):
#include <iostream>
int main() {
int sum = 0;
for (int i = 1; i <= 1000000; i += 4) {
sum += i + (i + 1) + (i + 2) + (i + 3);
}
std::cout << "Sum: " << sum << std::endl;
return 0;
}