2017-06-03 47 views
-2

在某些情况下,将一块内存分配给一个变量所花费的时间太多,并且出于优化原因必须尽可能地减少。这种情况最常发生在必须进行许多同一方法的迭代时,每次迭代都会分配和释放内存。让我举个例子来说:编译器可以优化嵌套循环吗?

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

不要在这种情况下,编译器循环之前进入循环仿佛变量声明之前分配内存,或者他们编译汇编代码不执行这一步,基本上编译东西“像你写的那样糟糕“? 此外,嵌套循环呢?

回答

1

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

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