为什么短路逻辑运算符应该更快

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

这个问题不是关于优化代码,而是关于短路逻辑运算符和普通逻辑运算符的性能差异的技术问题,这可能归结为它们在硬件级别上的执行方式。

基本上逻辑上的ANDOR需要一个周期,而短路评估使用分支并且可以采用不同的循环次数。现在我知道分支预测器可以使这个评估有效但我不知道它比1个循环更快?

是的,如果正确的操作数是昂贵的,那么试图不评估它是有益的。但对于像X & (Y | Z)这样的简单条件,假设这些是原子变量,非短路逻辑运算符可能会更快地执行。我对吗?


我假设短路逻辑运算符使用分支(没有官方来源,只是自我思考),因为在按顺序执行指令时你怎么做这些跳转?

performance logical-operators instructions branch-prediction
1个回答
-1
投票

短路逻辑运算符比正常运算符快,这与低级HW无关。只要你有这个代码

if((a == b) and (c == d)){
    do some thing;
}

如果和运算符是一个普通运算符和运算符,那么在运行时,并且将对其两侧进行求值,这意味着a == bc == d的值都将被清除。这里有一个问题,如果a == bfalse,那么我们不需要检查c == d作为整体,并将始终false。短路和操作员使用这个技巧,如果在这种情况下发现a == bfalse,那么它将不会检查条件的剩余部分,因为结果是已知的而没有消耗CPU周期来检查无限制条件。

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