首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在gcc中禁用编译器优化?

如何在gcc中禁用编译器优化?
EN

Stack Overflow用户
提问于 2011-04-24 01:58:45
回答 7查看 118.3K关注 0票数 87

我正在努力学习汇编语言。我已经搜索并发现了如何反汇编一个.c文件,但我认为它会产生程序的一些优化版本。有没有办法让我可以看到与我的C文件相对应的汇编代码。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-04-24 02:01:09

gcc选项-O支持不同级别的优化。使用-O0禁用它们,并使用-S输出程序集。-O3是最高级别的优化。

从gcc 4.8开始,可以使用优化级别的-Og。它支持不会干扰调试的优化,并且是标准编辑-编译-调试周期的推荐默认设置。

若要将程序集的方言更改为英特尔或att,请使用-masm=intel-masm=att

您还可以使用-fname手动启用某些优化。

请查看gcc manual以了解更多信息。

票数 124
EN

Stack Overflow用户

发布于 2011-04-24 02:02:53

对于gcc,您希望省略传递给编译器的任何-O1 -O2-O3选项,或者如果您已经有这些选项,则可以附加-O0选项以再次将其关闭。它还可以帮助您添加用于调试的-g,以便您可以在调试器中看到c源代码和反汇编的机器码。

另请参阅:http://sourceware.org/gdb/onlinedocs/gdb/Optimized-Code.html

票数 12
EN

Stack Overflow用户

发布于 2014-06-24 18:58:25

要在没有复制省略的情况下进行测试,并查看复制/移动构造函数/运算符的操作,请添加"-fno-elide-constructors“。

即使没有优化(-O0 ),GCC和Clang仍然会做复制省略,这在某些情况下具有跳过复制/移动构造函数的效果。有关副本省略的详细信息,请参阅this question

然而,在Clang 3.4中,它确实触发了一个错误(未调用构造函数的无效临时对象),该错误已在3.5中修复。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5765899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档