gpt4 book ai didi

c - "if"和 "else"之间的执行速度是否不同?

转载 作者:行者123 更新时间:2023-12-05 01:22:23 25 4
gpt4 key购买 nike

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

至少这是我的思考过程,对它的实际运作方式一无所知。这就是您的切入点。

这里是一些代码来显示我试图在两者之间做出选择:

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

请帮忙

最佳答案

现代 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)

if (__builtin_expect(x != 10, 1))
// do frequent stuff (expected)
else
// do stuff (not expected)

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

关于c - "if"和 "else"之间的执行速度是否不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74245740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com