Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance If/else性能_Performance_If Statement - Fatal编程技术网

Performance If/else性能

Performance If/else性能,performance,if-statement,Performance,If Statement,我试图通过比较两个if/else语句,找出CPU使用率和性能的差异,使用以下函数 function f(x): if(condition) return true; else return false; function f'(x): if(condition) return true; return false; 函数的用途并不重要,当然,在这两种情况下,如果'if'为true,您都希望返回true,否则返回false 在性能和CPU使用方面,这两段代码做的事情是一样的,当

我试图通过比较两个if/else语句,找出CPU使用率和性能的差异,使用以下函数

function f(x):
  if(condition) return true;
  else return false;

function f'(x):
  if(condition) return true;
  return false;
函数的用途并不重要,当然,在这两种情况下,如果'if'为true,您都希望返回true,否则返回false


在性能和CPU使用方面,这两段代码做的事情是一样的,当删除else语句并使用顺序执行来执行“else”时,这两个程序之间会有什么区别,或者编译时会丢失差异吗?

这两个函数之间没有差异。任何半体面的编译器都会为它们生成相同的代码

因为
if
分支的末尾包含
return
,所以第一个程序中的
else
是多余的。当程序被翻译成机器指令时,您会得到如下结果:

start:   LD $condition  -- Check condition
         JZ else_br     -- Conditional jump
         LD true_val
         RET            -- Return true
else_br: LD false_val
         RET            -- Return false

在第二个程序中,
else
分支为空,因此指令序列是相同的。

它不是在任何特定的语言中,只是使用准伪代码,因为我认为这更有意义。您是否尝试过用您选择的语言编译类似的代码,并查看生成的低级指令是否有差异?另外,我不确定这个问题是否可以用一种与语言无关的一般意义来回答,因为答案很可能取决于所使用的语言和编程环境。这些函数具有相同的CFG(倒V,如果附加专用的退出块,则为菱形),并且节点包含相同的代码,所以这真的不应该有什么区别。。但这取决于编译器,不需要思考和猜测。衡量这一点并知道这一点很简单。@BACON刚刚在gcc中运行了一个快速的c文件尝试,它们完全相同