[HELP]gcc用O2优化后代码性能反而下降……
编写一段代码,用-g编译,没有加优化,调试好基本功能后进行性能测试
之后用-O2编译,再做性能测试,发现性能只有之前debug版本的1/4,崩溃啊
各位有没有遇到过这种情况?有什么思路解决?
编译器是gcc3.3 操作系统suse10
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
从我的角度来看,很有可能!
其实优化根本不应该叫“优化”,我使用更多的是 “IR 转换”,其实“优化”只是尝试进行代码改进。改进的后果很可能是反而不如不改进,如果你的源代码写的很“特别”的话。
从另一个角度看,你的性能测试准确么?一定没有问题?这个可能性更大一些,因为耍编译器玩儿的代码不容易写出来。
其实还有 -O1 -O3 呢
如果想发现具体哪个转换选项造成了性能低下,可以 -v 并且一个选项一个选项的试试,选项去 gcc 网站找。
比较一下"优化"的汇编代码和"非优化"的汇编代码就清楚了.
"优化"是相对的,不是万能的,当然很多时候又很有用.
可以把测试贴出来吗?
这个没有绝对的,跟CPU也有很大的关系。
没有必要指定优化级别(-O1,-O2,-O3),用“-Os” 通知编译器用最合适的优化级别。以前用arm-elf-gcc version 2.95.x 加“-O2” 跑出来一个bug,反汇编一看,有一条指令汇编错了...
我不了解