【问题标题】:Is it possible to prevent optimization from a single translation unit, or part of it?是否可以阻止单个翻译单元或部分翻译单元的优化?
【发布时间】:2021-02-24 11:35:32
【问题描述】:

在包含数十个模块的项目中,我们将O1 作为默认调试优化级别。

有时,我需要较少的优化(即根本不需要优化)。所以我使用 clang 属性optnone 将单个函数排除在优化之外。

但是当要排除的函数数量很大时,这就变得很麻烦了。

有没有办法从优化中排除整个模块?例如在模块顶部设置一个编译指示。

【问题讨论】:

  • “需要”较小的优化表示源代码中通常应该修复的问题。通常,有些代码的行为未由 C 标准定义,可以通过使用替代方法或在必要时使用某些编译器功能来纠正。
  • @EricPostpischil - 或者,它只是让反汇编代码更容易与源代码同步。
  • @EricPostpischil 我认为问题比这更糟糕 - 可以观察到在优化时失败的代码不能保证在未优化时工作 - 它可能会在某些方面失败没有观察到,或者它可能会间歇性地失败。关闭优化只是希望隐藏真正的问题,而 IMO 是一种真正可疑的方法 - 充其量。
  • @AndrewHenle - 我认为你们两个在这种情况下做了太多假设,但作为一般性评论,你是对的。
  • @ysap 如果您不知道代码在优化时为什么会失败,那么您也不知道为什么在未优化时它不会失败。这意味着您不能确定它在所有条件下都能正常工作。那里没有假设。

标签: c optimization clang compiler-optimization armclang


【解决方案1】:

Clang 有一个特定于编译器的 pragma 是的,试试吧:

#pragma clang optimize off
//region of code
#pragma clang optimize on

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-01
    • 2012-09-09
    • 1970-01-01
    • 2012-01-06
    • 2020-03-27
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    相关资源
    最近更新 更多