短路是否会使程序的执行速度更快,并且正在分析哪个语句首先应用于条件语句中?

Omi*_*SCI 8 c++ performance short-circuiting logical-operators

例如(假设我们正在讨论C++,如果它有所不同),在一个&&运算符中,如果我知道一个语句将导致0更频繁/有更高的机会,那么另一个语句应该我把它放在左侧,右边的另一个声明?

同样适用于|| 运算符如果我知道一个语句会导致1更频繁/有更高的机会那么另一个语句我应该把它放在左侧,而另一个语句在右边?

现在做这一切会导致大量时间分析程序,但是如果这确实加快了程序的执行时间,那么值得这样做,这是嵌入式/实时系统程序员考虑加速他们的应用程序的东西如有必要?

小智 5

这取决于.如果声明如下:

if(y == 4 || x == 2)
Run Code Online (Sandbox Code Playgroud)

并假设x == 2的频率要高得多,这样我们就可以通过以下方式将执行短路:

if(x == 2 || y == 4)
Run Code Online (Sandbox Code Playgroud)

但是你会发现我们不会从中获得很多好处,因为语句非常简单,并且在这个级别优化代码可能不那么值得.

现在考虑一个例子:

if(y == an_expensive_function() || x == 2)
Run Code Online (Sandbox Code Playgroud)

这里假设an_expensive_function()是非常昂贵的操作,说它的复杂性就像指数一样,绝对有理由把语句放在:

if(x == 2 || y == an_expensive_function())
Run Code Online (Sandbox Code Playgroud)

执行短路.

嵌入式应用程序开发人员或应用程序开发人员或任何开发人员如果没有给他们带来太多好处,可能不会考虑在这么好的粒度下进行优化.如果事情对他们有效,他们甚至可能不会考虑它.因此,作为开发人员,我们需要检查,在这样的级别分析和优化代码需要多长时间,以及我们从中获得多少好处.


gsa*_*ras 4

首先,确保您不是过早优化的受害者。

话虽如此,请确保您已尽一切努力来加速程序的瓶颈。


在某些情况下,按照您所说的有关短路的做法可能是个好主意,但这在很大程度上取决于您的所有陈述。

例如,如果您有类似的内容:

if(slowFunction() && complexConditionRootsAndExponents && ConditionUsuallyZero)
Run Code Online (Sandbox Code Playgroud)

那么你可能会希望最后一个学期是第一个,不是吗?

然而,要小心,按照逻辑顺序排列事情并不总是微不足道的。例如,检查我在为什么这个程序打印了 4 次 fork 中的答案?,其中可以看到短路会影响程序的执行流程。


长话短说

但一般来说,通过排列条件中的项来获得显着的加速很少见。专注于程序的瓶颈并尽力解决它!