【问题标题】:Can compilers optimize nested loops?编译器可以优化嵌套循环吗?
【发布时间】:2017-11-05 01:36:47
【问题描述】:

在某些情况下,将一块内存分配给变量所花费的时间太多,出于优化原因必须尽可能减少。当必须对同一方法进行多次迭代时,这种情况最常发生,每次迭代都会分配和释放内存。让我举例说明:

while(something){
   int i = 4;
   int b =i*100;
   //...
}

在这种情况下,编译器是在进入循环之前分配内存,就好像变量是在循环之前声明的一样,还是编译汇编代码而不执行此步骤并且基本上编译“和你写的一样糟糕”的东西? 更进一步,嵌套循环呢?

【问题讨论】:

    标签: c gcc memory compilation variable-assignment


    【解决方案1】:

    在这种特定情况下,编译器可能根本不分配任何内存并将 400 视为常量,具体取决于循环体的其余部分是什么以及您使用的编译器优化选项。您应该构建一个简单的可运行示例,尝试一些优化标志并分析编译器生成的汇编代码。

    您也可以查看GCC's optimisation options。例如,-fgcse-lm-fgcse-sm 等标志可以启用您描述的某些行为。

    【讨论】:

      猜你喜欢
      • 2017-02-05
      • 1970-01-01
      • 1970-01-01
      • 2021-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-11
      相关资源
      最近更新 更多