如何解决进行“小于或等于”比较时,哪种方法更快? TL;DR:a <= b 更快......但你真的不应该在意
a <= b
比 a < b + 1
快(或表现更好)?
如果你们需要一种语言来回答我的问题,那么我会使用 javascript,因为我最常使用它。
解决方法
TL;DR:a <= b
更快...
首先,让我们记住,在任何编程语言中,所有代码操作都会在某个时间点(无论是在运行时还是编译时)被提炼为它们的机器代码等价物,以便实际执行,因为处理器(例如CPU)只理解机器代码,不理解 C#、JavaScript 或 Go。
考虑到这一点,我们可以将两个表达式分解为更接近其基本部分的内容:
-
a <= b
完全是一个操作,不能进一步分解 -
a < b + 1
是更多一个操作,它(无需复习计算机架构)大致可分解为:- 计算
b + 1
- 将
b + 1
的答案存储在缓存中(我们称之为c
) - 从缓存中读取
c
-
然后计算
a < c
- 计算
鉴于 this answer,这表明 <
和 <=
在速度/效率方面是相等的(因为它们都是处理器级别的“跳转”类型指令)我们可以说a <= b
绝对比a < b + 1
快,因为前者只是一个操作,而后者不止一个。
换句话说,如果比较操作需要x
时间,而加法/存储/读取一起需要y
时间,那么我们肯定知道 x + y
时间大于 x
时间,因为我们知道 x
和 y
都是非零的(没有操作需要 zero 时间)。
...但你真的不应该在意
永远不要忘记,premature optimization is the root of all evil。您应该不关心这种优化级别,因为它几乎可以保证无关紧要。 CPU 快。你的时间和劳动最好花在更明显的密集和耗时的操作上,只有当你注意到它比你想要或需要的速度慢时。
如果您愿意,这里有一个实际的基准:https://jsben.ch/KVrug。它在多次运行中返回不一致的结果,这有助于说明为什么这对于实际使用并不重要。与往常一样,在某些情况下,此级别的优化可能会发挥作用,但总的来说,这无关紧要。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。