在某些情况下,将内存块分配给变量所需的时间太多,出于优化原因必须尽可能减少时间。当必须对同一方法进行多次迭代时,这种情况最常发生,每次迭代都会分配和释放内存。让我用一个例子来解释一下:
while(something){
int i = 4;
int b =i*100;
//...
}
在这种情况下,编译器是否会在进入循环之前分配内存,就像在循环之前声明变量一样,还是编译汇编代码而不执行此步骤,并且基本上编译出“与您编写的一样糟糕”的内容? 更进一步,嵌套循环怎么样?
最佳答案
在这种特定情况下,编译器可能根本不分配任何内存,并将 400 视为常量,具体取决于循环体的其余部分是什么以及您使用的编译器优化选项。您应该构建一个简单的可运行示例,尝试一些优化标志并分析编译器生成的汇编代码。
您还可以查看GCC's optimisation options 。例如,-fgcse-lm
和 -fgcse-sm
等标志可以启用您所描述的某些行为。
关于编译器可以优化嵌套循环吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44349294/