如何关闭 GCC 中的任何优化标志

How to turn off ANY optimisation flag in GCC

我想了解如何关闭使用 GCC 编译的特定优化标志。我知道有些标志有 -fno 选项,但大多数标志没有(据我所见)。我正在尝试使用 -O1 标志编译一个程序,但在每次编译时删除 -O1 中的一个标志。

例如; -fauto-inc-dec 没有等效的 -fno-auto-inc-dec 标志,我可以将其传递到参数中,例如:-O1 -fno-auto-inc-dec.

想要使用 -O1 选项进行编译,但关闭 -O1 给出的特定选项以查看导致的差异。

任何帮助将不胜感激,不幸的是我是新手所以我是一个初学者。

为什么不反过来呢?使用 -O0 关闭 所有 优化并有选择地启用它们。

或者,如果您希望一一禁用它们,请从:

开始
CFLAGS=-O0 \
      -fauto-inc-dec \
      -fcompare-elim -fcprop-registers \
      -fdce -fdefer-pop -fdelayed-branch -fdse \
      -fguess-branch-probability \
      -fif-conversion2 -fif-conversion \
      -fipa-pure-const -fipa-profile -fipa-reference \
      -fmerge-constants \
      -fsplit-wide-types \
      -ftree-bit-ccp -ftree-builtin-call-dce -ftree-ccp -ftree-ch \
      -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse \
      -ftree-forwprop -ftree-fre -ftree-phiprop -ftree-slsr -ftree-sra \
      -ftree-pta -ftree-ter \
      -funit-at-a-time

(顺便说一句,所有这些信息都是从 man gcc 中提炼出来的)

man gcc所述:

Most optimizations are only enabled if an -O level is set on
the command line.  Otherwise they are disabled, 
even if individual optimization flags are specified.

所以基本上 传递任何 -O 标志你没有使用可配置的优化。

此外,-O1 不是默认值,-O0 是。

您也可以反其道而行之,禁用所有优化并手动启用 "batches",即查看 gcc -Q --help=optimizers,查看在哪个级别启用了哪些优化并删除这些优化。

为了解决您对 -O* 选项启用未列出的标志的担忧,我想说这是一个手册页。主动查询特定体系结构上的编译器 应该 为您提供详尽的优化列表,这些优化将通过特定的 -O 标志启用,因此将 -O0 与这些标志的列表应该产生完全相同的结果。