jsi*_*ist 6 c c++ if-statement
我想知道,如果我们if-else有条件,那么检查计算效率更高:使用等于运算符还是不等于运算符?有什么不同吗?
例如,以下哪一项在计算上有效,下面的两种情况都会做同样的事情,但哪一种更好(如果有任何差异)?
情况1:
if (a == x)
{
// execute Set1 of statements
}
else
{
// execute Set2 of statements
}
Run Code Online (Sandbox Code Playgroud)
案例2:
if (a != x)
{
// execute Set2 of statements
}
else
{
// execute Set1 of statements
}
Run Code Online (Sandbox Code Playgroud)
这里的假设大部分时间(比如90%的情况)a将等于x.a并且x都是无符号整数类型.
Cro*_*rog 10
通常,您使用哪个操作员的性能无关紧要.但是,建议分支时if语句的最可能结果首先出现.
Pet*_*rey 10
通常你应该考虑的是; 编写此代码的最简单,最清晰的方法是什么?恕我直言,第一,积极是最简单的(不要求!)
在性能方面没有差异,因为代码可能编译成相同的东西.(当然在JIT for Java中它应该)
对于Java,JIT可以优化代码,因此分支预测首选分支.
在这个简单的例子中,它没有任何区别.(假设a并且x是基本类型)如果它们是超载的类型operator ==或者operator !=它们可能不同,但我不担心它.
对于后续循环:
if ( c1 ) { }
else if ( c2 ) { }
else ...
Run Code Online (Sandbox Code Playgroud)
应该首先考虑最可能的条件,以防止对其他人进行无用的评估.(再次,这里不适用,因为你只有一个else).
GCC提供了一种向编译器通知表达式可能结果的方法:
if (__builtin_expect(expression, 1))
…
Run Code Online (Sandbox Code Playgroud)
这个内置计算值的值expression,但它通知编译器可能的结果是1(true对于布尔值).要使用它,您应该expression尽可能清楚地写(对于人类),然后将第二个参数设置为最有可能是结果的值.