MST

星途 面试题库

面试题:C++ Release版本中如何优化循环结构的代码

在C++ Release版本下,对于一个包含大量迭代操作的循环,例如计算1到1000000的累加和,简述至少两种可以优化循环性能的技巧,并给出优化前后的代码示例。
35.8万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

技巧一:减少循环体内的计算

  1. 优化前代码
#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;
}
  1. 优化后代码
#include <iostream>
int main() {
    int sum = 0;
    for (int i = 1; i <= 1000000; ++i) {
        sum += i; // 去掉不必要的乘除计算
    }
    std::cout << "Sum: " << sum << std::endl;
    return 0;
}

技巧二:使用寄存器变量(现代编译器优化下效果可能不明显,但原理有参考价值)

  1. 优化前代码
#include <iostream>
int main() {
    int sum = 0;
    for (int i = 1; i <= 1000000; ++i) {
        sum += i;
    }
    std::cout << "Sum: " << sum << std::endl;
    return 0;
}
  1. 优化后代码
#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;
}

技巧三:循环展开

  1. 优化前代码
#include <iostream>
int main() {
    int sum = 0;
    for (int i = 1; i <= 1000000; ++i) {
        sum += i;
    }
    std::cout << "Sum: " << sum << std::endl;
    return 0;
}
  1. 优化后代码(简单展开示例,展开倍数为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;
}