c++ - 通过循环展开优化程序

标签 c++ for-loop loop-unrolling

我有一个关于 for 循环中的循环展开以及如何在 for 循环中使用的问题,因为在用户输入之前您不知道迭代次数。

我见过在循环中展开循环的示例,其中给出了迭代次数,并且在一次迭代中执行了更多指令。例如:

for(int i=0; i < 50; i++){ // instead of i < 200
 doSomething();
 doSomething();
 doSomething();
 doSomething();
}

我的问题具体针对

for(i=0; i<n; i++){
  doSomething();
}

其中n是由用户给出的,所以我不知道如何在这种情况下准确地利用循环展开。

我想知道是否应该向这个循环添加条件,但这告诉我这会减慢我的程序速度。

最佳答案

你可以这样做:

int i = 0;
while (i<=n-4) {
    doSomething();
    doSomething();
    doSomething();
    doSomething();
    i += 4;
}
while (i<n) {
    doSomething();
    i++;
}

您可能需要用 3 个 if 替换第二个循环(因为循环体最多执行 3 次)。

请注意,优化编译器通常会自动执行这种转换,因此您不必这样做(除非它们不这样做: Why is an integer array search loop slower in C++ than Java? )。

关于c++ - 通过循环展开优化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56227416/

相关文章:

gcc - 禁用 GCC 中特定循环的展开

c++ - 嵌套类作为C++中成员函数的参数

c - 如何告诉编译器展开这个循环

c++ - 在 Qt 中创建模型时出现多个错误

PHP:检查是否为 0?

for-loop - (%*) 在批处理 for 循环中意味着什么?

javascript - Javascript for 循环的确切执行顺序是什么?

c - GCC 5.1 循环展开

c++ - 在 Win32 API 中绘制格式化文本的最快方法是什么?

c++ - Mac 上的 clang 不支持统一初始化吗?