c - 选择相当于 -O1 的 gcc 优化标志

标签 c gcc compiler-optimization

我有一个小程序,使用 -O1 编译时性能比不进行优化要好得多。我有兴趣了解编译器所做的哪些优化导致了这种加速。

我想我要做的是获取 -O1 等效的优化标志列表(从手册页和 gcc -Q -v 中获取) >),然后在列表中进行选择以查看性能如何变化。

我发现,即使包括整个优化列表,仍然无法提供一个与 -O1 优化的程序一样好的程序。

换句话说

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

不等于

gcc -O1 myprogram.c

我使用的是 gcc 版本 4.5.3

-O1 执行的其他操作是否未包含在手册中与 -O1 相关的优化标志列表中?

最佳答案

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

从同时使用“my_program.c”的两个实验来看,无论建议的算法有多长, -O0 选项都会禁用所有优化。

关于c - 选择相当于 -O1 的 gcc 优化标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12769173/

相关文章:

c - C 中 getchar 函数返回的值存储在 int 和 char 中的区别

GCC 代码似乎违反了内联汇编规则,但专家认为并非如此

加载字节时,Clang 不会将高位清零。这是一个错误还是一个故意的选择?

c - 为什么 GLib 会重新定义类型?

c - 简单的计数程序问题

c - sched_yield 在这种情况下做了什么?

c - C 编译器优化的基准

使用指针复制对循环进行 C++ 编译器优化

c - 使用递归函数反转字符串

c++ - union 中的位字段 - 这有多便携?