哪种代码更有效率,是额外的If语句还是重复函数?

问题描述 投票:0回答:1

关于用C语言编码,哪种方式会更快,用If检查语句,或者我反正就是运行函数,比如说输出已经是1。

if(a==b && output!=1)
{
    output=1;
}

或者说

if(a==b)
{
    output=1;
}

在第一段代码中,每次代码运行时都要运行一个额外的检查。

在第二段代码中,你不必要地重复运行代码。

哪个更有效率?

c performance if-statement pic
1个回答
2
投票

这个问题基本上归结为比较是否比变量赋值便宜的问题。 对于整数,答案是否定的。 我假设这将是一个紧密的循环,变量已经在CPU的一级缓存中。 比较将被编译成Op代码,比如:1)你可能会得到一个优化,其中2)你可能会得到一个优化,其中2)你可能会得到一个优化,其中2)你可能会得到一个优化,其中2)你可能会得到一个优化,其中2)你可能会得到一个优化,其中2)你可能会得到一个优化,其中2)你可能会得到一个优化,其中2)你可能会得到一个优化,其中2)你可能会得到一个优化,其中2)你可能会得到一个优化,其中2)你可能会得到一个优化,其中2)你可能会得到一个优化,其中2)你可能会得到一个优化,其中2)你可能会得到一个优化,其中2)你可能会得到一个优化,其中2)你可能会得到一个优化,其中2)你可能会得到一个优化,其中2)你可能会得到一个优化,其中2)你可能会得到一个优化,其中2)你可能会得到一个优化,其中2)你可能会得到一个优化。

1) Move "output" memory locations data into Register A
2) Put  1 into Register B
3) Jump <somewhere> if Register A == Register B.

你可能会得到一个优化,其中2)是不做的,如果比较到0的话,因为在大多数CPU中,有特殊的运算代码来比较到0。

赋值会编译成类似的运算码。

1) Put 1 into Register A
2) Push Register A to memory location of output

问题归根结底是每个操作码所花费的时钟周期。 我认为它们都可能是完全相同的时钟周期。


2
投票

不管任何可能的优化,如评论中所示,由于额外的检查,第一个代码的效率低于第二个代码。

小心你的数据意义,那个检查可能是强制性的。如果不是,你应该按照建议优化你的代码。


编辑

我假设你的问题更多的是理论而不是实践。在任何真实的场景中,当我们想要优化一些代码时,数据上下文承担着巨大的作用。代码本身不需要快,但在处理数据时需要快。

© www.soinside.com 2019 - 2024. All rights reserved.