How to disable compiler optimizations in gcc?

后端 未结 7 821
误落风尘
误落风尘 2020-12-07 11:07

I am trying to learn assembly language. I have searched and found how to disassemble a .c file but I think it produces some optimized version of the program. Is

相关标签:
7条回答
  • 2020-12-07 11:30

    To test without copy elision and see you copy/move constructors/operators in action add "-fno-elide-constructors".

    Even with no optimizations (-O0 ), GCC and Clang will still do copy elision, which has the effect of skipping copy/move constructors in some cases. See this question for the details about copy elision.

    However, in Clang 3.4 it does trigger a bug (an invalid temporary object without calling constructor), which is fixed in 3.5.

    0 讨论(0)
  • 2020-12-07 11:38

    Long time ago, but still needed.

    info - https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
    list - gcc -Q --help=optimizers test.c | grep enabled
    disable as many as you like with:
      gcc **-fno-web** -Q --help=optimizers test.c | grep enabled
    
    0 讨论(0)
  • The gcc option -O enables different levels of optimization. Use -O0 to disable them and use -S to output assembly. -O3 is the highest level of optimization.

    Starting with gcc 4.8 the optimization level -Og is available. It enables optimizations that do not interfere with debugging and is the recommended default for the standard edit-compile-debug cycle.

    To change the dialect of the assembly to either intel or att use -masm=intel or -masm=att.

    You can also enable certain optimizations manually with -fname.

    Have a look at the gcc manual for much more.

    0 讨论(0)
  • 2020-12-07 11:42

    You can disable optimizations if you pass -O0 with the gcc command-line.

    E.g. to turn a .C file into a .S file call:

    gcc -O0 -S test.c

    0 讨论(0)
  • 2020-12-07 11:43

    For gcc you want to omit any -O1 -O2 or -O3 options passed to the compiler or if you already have them you can append the -O0 option to turn it off again. It might also help you to add -g for debug so that you can see the c source and disassembled machine code in your debugger.

    See also: http://sourceware.org/gdb/onlinedocs/gdb/Optimized-Code.html

    0 讨论(0)
  • 2020-12-07 11:44

    You can also control optimisations internally with #pragma GCC push_options

    #pragma GCC push_options
    /* #pragma GCC optimize ("unroll-loops") */     
    
    .... code here .....
    
    #pragma GCC pop_options
    
    0 讨论(0)
提交回复
热议问题