首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择等同于-O1的gcc优化标志

选择等同于-O1的gcc优化标志
EN

Stack Overflow用户
提问于 2012-10-07 21:17:09
回答 2查看 300关注 0票数 2

我有一个小程序,当用-O1编译时,它的性能要好得多,而不是不优化。我很想知道编译器所做的优化是什么导致了这种加速。

我想我要做的是(从手册页和gcc -Q -v中获得) -O1相当于优化标志的列表,然后从列表中挑选出性能如何变化。

我所发现的是,即使包含整个优化列表,也不能给我提供一个性能与-O1优化的程序相同的程序。

换句话说

代码语言:javascript
复制
gcc -O0 -fcprop-registers -fdefer-pop -fforward-propagate -fguess-branch-probability \
    -fif-conversion -fif-conversion2 -finline -fipa-pure-const -fipa-reference \
    -fmerge-constants -fsplit-wide-types -ftoplevel-reorder -ftree-ccp -ftree-ch \
    -ftree-copy-prop -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse \
    -ftree-fre -ftree-sink -ftree-sra -ftree-ter myprogram.c

不同于

代码语言:javascript
复制
gcc -O1 myprogram.c

我使用的是gcc 4.5.3版

有没有其他-O1做的事情没有包括在手册中与-O1相关的优化标志列表中?

EN

回答 2

Stack Overflow用户

发布于 2012-10-07 21:28:24

使用-S选项检查生成的汇编程序如何?

从另外使用"my_program.c“的两个实验来看,-O0选项似乎禁用了所有优化,而不管建议的算法列表有多长。

票数 2
EN

Stack Overflow用户

发布于 2018-02-12 20:48:39

这是意料之中的,而不是一个错误:https://gcc.gnu.org/wiki/FAQ#optimization-options

有没有-O1做的其他事情没有包括在手册中与-O1相关的优化标志列表中?

是的,它开启了优化。指定单独的-fxxx标志不会做到这一点。

如果不使用-O1-O2-O3-Ofast-Og优化选项(而不是-O0),则根本不会进行任何优化,因此调整哪些优化通道是活动的也不会做任何事情。

要找出哪个优化过程会产生差异,可以启用-O1,然后禁用各个优化过程,直到找到影响差异的优化过程为止。

即,不是:

代码语言:javascript
复制
gcc -fxxx -fyyy -fzzz ...

使用:

代码语言:javascript
复制
gcc -O1 -fno-xxx -fno-yyy -fno-zzz ...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12769173

复制
相关文章

相似问题

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