【发布时间】:2021-02-24 11:35:32
【问题描述】:
在包含数十个模块的项目中,我们将O1 作为默认调试优化级别。
有时,我需要较少的优化(即根本不需要优化)。所以我使用 clang 属性optnone 将单个函数排除在优化之外。
但是当要排除的函数数量很大时,这就变得很麻烦了。
有没有办法从优化中排除整个模块?例如在模块顶部设置一个编译指示。
【问题讨论】:
-
“需要”较小的优化表示源代码中通常应该修复的问题。通常,有些代码的行为未由 C 标准定义,可以通过使用替代方法或在必要时使用某些编译器功能来纠正。
-
@EricPostpischil - 或者,它只是让反汇编代码更容易与源代码同步。
-
@EricPostpischil 我认为问题比这更糟糕 - 可以观察到在优化时失败的代码不能保证在未优化时工作 - 它可能会在某些方面失败没有观察到,或者它可能会间歇性地失败。关闭优化只是希望隐藏真正的问题,而 IMO 是一种真正可疑的方法 - 充其量。
-
@AndrewHenle - 我认为你们两个在这种情况下做了太多假设,但作为一般性评论,你是对的。
-
@ysap 如果您不知道代码在优化时为什么会失败,那么您也不知道为什么在未优化时它不会失败。这意味着您不能确定它在所有条件下都能正常工作。那里没有假设。
标签: c optimization clang compiler-optimization armclang