为什么说三目条件运算符?:操作符能使编译器产生比if-then-else更优化的代码

2024年12月02日 21:01
有4个网友回答
网友(1):

所谓优化问题1.内存优化,就是所写代码的长度要尽可能的短小但又不是功能,占用内存尽可能的少; 2.计算机cpu执行编译好的代码所用的时间尽可能的少,因为计算机只有一个cpu,同一时间只能执行一个程序,这就要求我们写代码尽可能少的占用cpu的时间 根据以上的介绍我们再来谈三目运算符的?:与if -then-else优化的问题,三目运算符执行的起来使用最多是三个机械周期,而if -then-else至少是三个机械周期,这就是说它至少在占用cpu上是得到了优化,其次我们再来看看代码,很明显if -then-else的代码要比?:的代码写得要长一些,综合以上三目运算符?:是要比if -then-else更为的优化。在这里多说一点,三目运算符?:没有if -then-else使用的灵活,这也是他们的机构所决定的 越集中的东西越不灵活,无所谓谁更好,只有使用谁更适合

网友(2):

你这个问题很有深度,需要从汇编的角度来解释

比如这样的一个含有三目条件运算符的语句

int b=a>5?2:20;
反汇编之后:
0040102F xor eax,eax
00401031 cmp dword ptr [ebp-4],5
00401035 setle al
00401038 dec eax
00401039 and al,0EEh
0040103B add eax,14h
0040103E mov dword ptr [ebp-8],eax
注意到了么?关键在于没有 jmp 跳转指令!!
CPU在执行指令的过程中会充分地利用流水线技术来增加程序的并行化,但是如果CPU遇到了跳转指令,例如if-else语句,那么就有可能会清空流水线,导致执行效率降低。所以说没有跳转的指令(三目运算)能比有跳转的指令(if-else)更加优化。

你如果想更多地了解这方面的知识,建议看看《编程卓越之道》(卷一、卷二)和《深入理解计算机》这2本书,我一直觉得这2本书是高级程序员必修课程。

网友(3):

这种东西是伪命题,只要三目能做到的if-then-else理论上也应该可以。这大概是基于某种特定的编译器特定的实现方法的说法

网友(4):

在软件测试中,if...else... 会导致测试用例成指数级生成,增加测试难度,而且还不能穷尽。在实际中所以要尽量避免这种的