【问题标题】:What does gcc (and clang) do if you specify more than one optimization flag together? [duplicate]如果同时指定多个优化标志,gcc(和 clang)会做什么? [复制]
【发布时间】:2020-05-16 02:01:21
【问题描述】:

构建系统无法弄清楚,尽管可以配置一个额外的标志:在尝试做一些快速和肮脏的测试时,我可以注入一个额外的 -O3 标志来查看程序的性能处于 -O3 优化之下。

然而,-O2 也被指定,并且在之后被指定。

问题是,编译器是否明确定义只有最后一个优化标志会保留?或者它(我希望)会采用最高指定的优化级别吗?还是未定义?这绝对不是抱怨或出错,这是肯定的。

【问题讨论】:

  • C++ 编程语言中没有指定编译器在这方面的行为。除非在编译器的文档中明确记录了这一点,否则您唯一能做的就是通过编写一些根据优化级别生成不同程序集的代码自己弄清楚,然后尝试多个优化级别选项并查看哪个版本出来。不应该是一个困难的实验。
  • -O<something> 可能会导致编译失败。没有统一的“编译这个c++程序”界面。

标签: c++ gcc clang


【解决方案1】:

这一切都在文档中。来自gcc optimize options

如果您使用多个 -O 选项,无论是否带有级别编号,最后一个这样的选项都是有效的。


如果同时指定多个优化标志,gcc(和 clang)会做什么?

您正在使用的编译器使用在命令行最后指定的优化-O 选项。

是否明确定义了编译器只保留最后一个优化标志?

它记录在您的编译器文档中。

还是会采用最高指定的优化级别?

没有。

还是未定义?

没有。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-30
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    相关资源
    最近更新 更多