如何在gcc中禁用编译器优化?
我正在学习汇编语言。 我已经search并find了如何反汇编一个.c
文件,但我认为它会产生一些优化版本的程序。 有没有什么办法,我可以看到我的C文件对应的确切汇编代码。
gcc选项-O
启用不同级别的优化。 使用-O0
禁用它们,并使用-S
输出组件。 -O3
是最高级别的优化。
从gcc 4.8开始,优化级别-Og
可用。 它使优化不会干扰debugging,并且是标准编辑 – 编译 – debugging周期的推荐默认值。
要将程序集的方言改为intel或att,使用-masm=intel
或-masm=att
。
您也可以使用-fname
手动启用某些优化。
看看更多的海湾合作委员会手册 。
对于gcc,您希望省略传递给编译器的-O1 -O2或-O3选项,或者如果您已经拥有它们,您可以附加-O0选项以再次closures它。 它也可以帮助您添加-g进行debugging,以便您可以在debugging器中看到c源代码和反汇编的机器代码。
另见: http : //sourceware.org/gdb/onlinedocs/gdb/Optimized-Code.html
使用开关-O0( – [capital o] [zero])禁用优化,-S取得汇编文件。 看看这里看到更多的gcc命令行选项。
要testing没有复制elision,并看到你复制/移动构造函数/操作符添加“-fno-elide-constructors”。
即使没有优化(-O0),GCC和Clang仍然会进行复制elision,在某些情况下会跳过复制/移动构造函数。 看到这个问题的复制elision的细节。
但是,在Clang 3.4中它触发了一个错误(一个无效的临时对象,没有调用构造函数),在3.5中被修复。
如果您使用gcc命令行传递-O0,则可以禁用优化。
例如,将.C文件转换为.S文件调用:
gcc -O0 -S test.c