【问题标题】:Are the effects of hand-optimization of code consistent across different gcc optimization levels?在不同的 gcc 优化级别之间手动优化代码的效果是否一致?
【发布时间】:2013-04-27 00:48:34
【问题描述】:

如果我使用-O0 运行 gcc,并使用here 中提到的技术手动优化我的代码,通常情况下,当我运行 gcc 时,我优化的代码会比未优化的代码运行得更快-O3?

也就是说,如果我在特定编译器优化级别下手动优化代码,这些优化在不同(更高或更低)编译器优化级别下通常是否仍然有效(而不是适得其反)?

【问题讨论】:

  • 不一定。编译器可以很好地理解简单的代码,并且可以很好地对其进行优化。编译器不能很好地理解复杂的手动优化代码,因此它通常无法像简单代码一样优化它。但它知道一些常见的成语,可以毫无问题地处理。

标签: c optimization gcc


【解决方案1】:

在不同的编译器中可能不一样。甚至编译器也可以取消您的手动优化,我的意思是忽略它们。它在很大程度上取决于编译器本身的实现和行为。大多数优化就像是对编译器的请求,可以随时删除,(大多数情况下没有任何通知)

【讨论】:

  • 假设我使用相同的编译器版本,只是使用不同的标志?
  • 对不起,我的回答似乎有点不对劲。我谈到了不同的编译器。通常,如果它是一个属性声明或类似于作为单独的tag 的属性声明,编译器会尝试将其作为用户约束保持不变,直到最后。因此,在这种情况下,它可能会迫使编译器放弃本机(内置)优化。但是修改类似于代码流的变化,使用不同的操作符并没有区别对待。所以这些可能会让位于本机优化。因此,根据输入,您可能会得到混合的结果。但这种相互冲突的案例应该很少见。
猜你喜欢
  • 2020-07-06
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
  • 2010-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-01
相关资源
最近更新 更多