当前位置:  开发笔记 > 编程语言 > 正文

在GCC中使用-O3有什么缺点吗?

如何解决《在GCC中使用-O3有什么缺点吗?》经验,为你挑选了2个好方法。

我已经在各种语言中担任了13年的软件工程师,尽管我现在正在进入C和后来的C++.当我正在学习C时,我正在使用GCC编译器来编译我的程序,我想知道是否有使用-O3或其他优化标志的问题.如果没有测试编译的代码,或者在交叉编译期间,我的软件可能会破坏我无法捕获的方式,我可能会无意中混淆了某个不同的平台.

在我盲目地打开这些选项之前,我想知道我能期待什么.此外,由于-Ofast打开了不符合标准的标志,我倾向于不使用它.在我的假设中,我是否正确--Ofast很可能会产生"副作用?"

在发布此问题之前,我已经浏览了https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html.



1> Soren..:

唯一的缺点-O3应该是无法在调试器中遵循代码.

使用-Ofast会影响某些浮点运算导致舍入错误,但除非您运行特定的长浮点计算链,否则您不太可能注意到.

破坏的代码(带有错误指针的代码或具有未定义行为的语句)可能在不同的优化级别上表现不同 - 许多程序员的第一反应是责怪编译器 - 启用所有警告并修复它们通常会有所帮助.


@RickMacGillis`-Wall -Wextra -pedantic`是得心应手,而且也要记得手动指定语言标准(`-std = c11`或`-std = C++ 14`),或者这反而会给你GNU模式有一堆(有用的,但非标准的)扩展.

2> DaoWen..:

重要的是要记住几乎所有编译器优化都是启发式的.换句话说,"optmization"只是试图使你的程序更"理想",但它可能会产生相反的效果.只是因为-O3它应该比它更好-O2,而且-O2应该更好-O1- 这并不意味着它实际上总是如何运作.

有时,-O3与使用-O2或生成的版本相比,启用"优化" 可能实际上会降低程序速度-O1.您应该尝试不同级别的优化,以查看哪种方法最适合您的特定代码.如果您真的想要对其进行微调,您甚至可以打开和关闭各个选项.

所以简而言之,使用起来可能会有缺点-O3.我个人观察到我写的很多内容-O2比使用的更好-O3- 但这确实是程序特定的.


仅供参考,这是另一个问题,问为什么-O2给出比-O3特定程序更好的结果:gcc优化标志-O3使代码慢于-O2

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有