关于用C语言编码,哪种方式会更快,用If检查语句,或者我反正就是运行函数,比如说输出已经是1。
if(a==b && output!=1)
{
output=1;
}
或者说
if(a==b)
{
output=1;
}
在第一段代码中,每次代码运行时都要运行一个额外的检查。
在第二段代码中,你不必要地重复运行代码。
哪个更有效率?
这个问题基本上归结为比较是否比变量赋值便宜的问题。 对于整数,答案是否定的。 我假设这将是一个紧密的循环,变量已经在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
问题归根结底是每个操作码所花费的时钟周期。 我认为它们都可能是完全相同的时钟周期。
不管任何可能的优化,如评论中所示,由于额外的检查,第一个代码的效率低于第二个代码。
小心你的数据意义,那个检查可能是强制性的。如果不是,你应该按照建议优化你的代码。
编辑
我假设你的问题更多的是理论而不是实践。在任何真实的场景中,当我们想要优化一些代码时,数据上下文承担着巨大的作用。代码本身不需要快,但在处理数据时需要快。