“if”和“else”之间的执行速度是否不同?

dev*_*l05 3 c

我试图查看 == 和 != 之间的速度差异,我突然想到 if-else 中的顺序可能并不重要。纯粹从逻辑上讲,如果您需要测试一个条件,并且只有两个选项,那么跳到“if”部分或“else”部分应该没有任何区别。

至少这是我的思考过程,对它的实际运作方式一无所知。这就是你进来的地方。

这是一些代码来显示我想要选择的内容:

if (x == 10)
    // do stuff. this will be true 20% of the time
else
    // do frequent stuff
Run Code Online (Sandbox Code Playgroud)
if (x != 10)
    // do frequent stuff 80% of time
else
    // do other stuff 20% of the time
Run Code Online (Sandbox Code Playgroud)

请帮忙

小智 6

现代 CPU 是流水线式的,因此它们在完成当前指令之前就开始执行下一条指令。这对于性能来说非常好,但是当 CPU 有分支(例如 if 语句)时就会出现问题。然后CPU必须猜测要走哪条路,如果猜对了,一切都会以最大速度继续,但如果猜错了,它就必须返回并遵循正确的路径,这是相当昂贵的。

您不必担心到底是什么影响了 CPU 的猜测决策,因为gccclang可以__builtin_expect用来告诉编译器哪个分支发生得更频繁。

在你的情况下,你可以将代码编写为

if (__builtin_expect(x == 10, 0))
    // do stuff (not expected to happen)
else
    // do frequent stuff (expected)
Run Code Online (Sandbox Code Playgroud)

或者

if (__builtin_expect(x != 10, 1))
    // do frequent stuff (expected)
else
    // do stuff (not expected)
Run Code Online (Sandbox Code Playgroud)

您可以查看此 stackoverflow 帖子了解更多信息: What is the Advantage of GCC's __builtin_expect in if else statements?