检查if(false){} else {if(false){}}和if(false){}之间的性能if else(false){}

时间:2015-06-19 11:21:54

标签: performance if-statement

请帮助检查以下两个区块代码之间的性能。我不能认为在运行时两者都是一样的(忽略数字元素和相同的条件)。

// Block I
    if(condition1)
    {
       // Do something
    }
    else
    {    if(condition2)
        {
           // Do something
        }
        else
        {    if(condition3)
            {
               // Do something
            }
            else
            {    if(condition4)
                {
                   // Do something
                }
            }
        }
    }

    //--------------------------------
    // Block II
    if(condition1)
    {
       // Do something
    }
    else  if(condition2)
    {
       // Do something
    }
    else  if(condition3)
    {
       // Do something
    }
    else  if(condition4)
    {
       // Do something
    }

帮助我!

1 个答案:

答案 0 :(得分:1)

假设语言为C(您没有指定),那么您可以通过比较gcc的程序集输出来验证您的两个代码段生成完全相同的代码:

#!/bin/bash
diff <(gcc -O0 -S -o - -x c - <<EOF
extern int condition1();
extern int condition2();
extern int condition3();
extern int condition4();
extern void do_something1();
extern void do_something2();
extern void do_something3();
extern void do_something4();

void main() {
    if(condition1())
    {
       do_something1();
    }
    else
    {    if(condition2())
        {
           do_something2();
        }
        else
        {    if(condition3())
            {
               do_something3();
            }
            else
            {    if(condition4())
                {
                   do_something4();
                }
            }
        }
    }
}
EOF
) <(
gcc -O0 -S -o - -x c - <<EOF
extern int condition1();
extern int condition2();
extern int condition3();
extern int condition4();
extern void do_something1();
extern void do_something2();
extern void do_something3();
extern void do_something4();

void main() {
    if(condition1())
    {
       do_something1();
    }
    else if(condition2())
    {
       do_something2();
    }
    else if(condition3())
    {
       do_something3();
    }
    else if(condition4())
    {
       do_something4();
    }
}
EOF
)

这不会产生任何输出(您可以通过(例如)从其中一个函数中删除最后一个条件并观察它现在显示差异来证明该测试是有效的。)

由于两个块的汇编语言输出相同,因此可以推断出性能特征必须完全相同。