在某些情况下,将一块内存分配给变量所花费的时间太多,并且出于优化原因必须尽可能地减少。当必须进行相同方法的许多迭代时,这种情况最常发生,其中内存被分配并在每次迭代时被释放。让我解释一个例子:
{{1}}
在这种情况下,编译器是否在进入循环之前分配内存,就好像变量是在循环之前声明的那样,或者它们是否在不执行此步骤的情况下编译汇编代码并且基本上编译了某些东西"就像你写的那样糟糕&#34 ;? 而且,嵌套循环呢?
答案 0 :(得分:1)
在这种特定情况下,编译器可能根本不分配任何内存并将400视为常量,具体取决于循环体的其余部分,具体取决于您使用的编译器优化选项。您应该构造一个简单的可运行示例,尝试一些优化标志并分析编译器生成的汇编代码。
您还可以查看GCC's optimisation options。例如-fgcse-lm
和-fgcse-sm
等标志可以启用您描述的某些行为。