C语言拾趣---关于if和三目运算符

来源:互联网 发布:飞利浦d908软件 编辑:程序博客网 时间:2024/05/16 06:40

以前一直以为三目运算符作为运算符会比if更加简洁,今天使用VS2008C++代码进行反汇编以后发现我一直都是错的

 

代码如下:

void main(void)

{

     int a,b,c,d,e,f;

     a = 1;

     b = 2;

     c = 3;

     d = 4;

     if(a > b){

         e = a;

     }

     else{

         e = b;

     }

 

     f = c>d?c:d;

 

}

 

比较反汇编结果:

 

00A113AA  mov         eax,dword ptr [a]   <->   00A113C0  mov         eax,dword ptr [c]

00A113AD  cmp         eax,dword ptr [b]   <->   00A113C3  cmp         eax,dword ptr [d]

00A113B0  jle         main+4Ah (0A113BAh) <->   00A113C6  jle         main+63h (0A113D3h)

00A113B2  mov         eax,dword ptr [a]   <->   00A113C8  mov         ecx,dword ptr [c]

00A113B5  mov         dword ptr [e],eax   <->   00A113CB  mov         dword ptr [ebp-10Ch],ecx

00A113B8  jmp         main+50h (0A113C0h) <->   00A113D1  jmp         main+6Ch (0A113DCh)

00A113BA  mov         eax,dword ptr [b]   <->   00A113D3  mov         edx,dword ptr [d]

00A113BD  mov         dword ptr [e],eax   <->   00A113D6  mov         dword ptr [ebp-10Ch],edx

                                          <->   00A113DC  mov         eax,dword ptr [ebp-10Ch]

                                          <->   00A113E2  mov         dword ptr [f],eax

 

哇塞,三目运算符居然使用了临时位置,结果多了两次mov操作。

结果:if比三目运算符使用的效率高。

原创粉丝点击