编译器可以优化嵌套循环吗?

标签 c gcc memory compilation variable-assignment

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

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/

相关文章:

c - 在结构初始化中定义常量变量

在c中将指针强制转换为int

c - 函数中的局部变量重叠并破坏共享对象中定义的静态全局变量的内存空间

gcc - -rpath 和 -L 有什么区别?

android - 如何诊断 Xamarin Android 弱引用表溢出的原因?

c - 为什么我的代码在 Visual 中不起作用,但在 CodeBlocks 中却可以?

c - 如何使用 C 在 fclose() 之后移动文件

c - "dynamically loading a library file"和 "specifying .so path in Makefile"之间的区别?

performance - JavaFX 吃掉我的内存?

Java 读取文件到字节数组 - 最有效的实现