【问题标题】:Precomputation of constants (Is there a performance difference?) [duplicate]常数的预计算(有性能差异吗?)[重复]
【发布时间】:2021-11-27 11:46:53
【问题描述】:

编译器是否“足够聪明”来预先计算它,还是会对性能产生影响?

const float num = 0.8660254f; // Sqrt(3) / 2

while(true)
{
  float h = num * GetSomeNumber();
}

while(true)
{
   float h = (Sqrt(3) / 2 ) * GetSomeNumber();
}

const float num = 1.7320508f; // Sqrt(3)

while(true)
{
  float h = (num / 2) * GetSomeNumber();
}

还有什么理由(不)进行预计算?

【问题讨论】:

标签: c#


【解决方案1】:

首先,编译器不进行任何计算。代码的计算或执行是运行时的事情。编译器足够聪明,可以对代码进行多次性能调整,但它不知道你在运行时调用了什么方法。所以它不会知道你的方法Sqrt 在运行时的行为。因此,它在编译期间将无法预先执行计算。

【讨论】:

    猜你喜欢
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    相关资源
    最近更新 更多