如何关闭 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
与这些标志的列表应该产生完全相同的结果。
我想了解如何关闭使用 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
与这些标志的列表应该产生完全相同的结果。