如何关闭GCC中的所有优化

如何关闭GCC中的所有优化,c,gcc,compiler-optimization,C,Gcc,Compiler Optimization,如何关闭GCC中的所有优化?使用-O0不起作用,因为它仍然优化了没有效果的语句,或者优化了无限循环后没有中断语句的任何代码。没有办法让gcc不忽略无法访问的代码和没有效果的语句 您可以做的是使用易失性变量使不可访问的代码看起来是可访问的 volatile bool always_true = true; if( always_true ) { //infinite loop //return something } //Useless code 在上面的示例中,gcc

如何关闭GCC中的所有优化?使用-O0不起作用,因为它仍然优化了没有效果的语句,或者优化了无限循环后没有中断语句的任何代码。

没有办法让gcc不忽略无法访问的代码和没有效果的语句

您可以做的是使用易失性变量使不可访问的代码看起来是可访问的

volatile bool always_true = true;

if( always_true  )
{
     //infinite loop
     //return something
}

//Useless code
在上面的示例中,gcc不会优化无用的代码,因为它无法知道它实际上是无用的

int a = 5;
int b = 5;
volatile int c = 9;

c += 37;
return a + b;

在本例中,整数c不会被优化,因为gcc不知道它是死重代码。

您必须使代码几乎不可能被编译器优化。 例如:

  • 对不希望优化的变量使用
    volatile
    关键字
  • 确保代码有效,例如:不仅要更改变量值,还要打印该值或将其存储到另一个变量中,或者对该变量执行算术运算并将其存储到另一个变量中
  • 引用/更改其他函数中的变量,以确保编译器无法判断该变量未在编译时使用

没有,我只有-g-gstrict dwarf-wall,我认为你不能关闭所有的优化。即使没有任何标志,gcc也会进行一些基本的优化。删除没有效果的语句(优化与否)是有意义的。只是好奇:为什么你想保留死代码?这是为了测试框架的目的。Shere:它指出,对于gcc,如果执行时间是一个问题,那么在生产中使用-O0是非常不寻常的,因为-O0确实意味着根本没有优化。在进行性能比较时,应该记住gcc和其他编译器之间的这种差异。问题是您是否真的关心编译和调试优化。。我相信你读不懂它,就像你读不懂汇编本身一样。