比较和赋值哪个更昂贵?

23

我开始阅读《算法》,并一直想知道,当处理相同类型的基元时,赋值和比较哪个操作更昂贵?这在不同的编程语言中有很大的差异吗?

2个回答

11

你认为呢?

最底层的一个执行两次读取,另一个执行一次读取和一次写入。

但是你为什么要在这个级别上关心性能呢?在这个级别上优化应该考虑 大O符号


6
你可能会感兴趣的是,这本书主要是关于大O符号的。为什么你应该关心呢?因为你不知道。 - cmsjr
3
我同意这是一个荒谬的优化,但了解每个功能的工作方式并不是毫无价值的。我给原贴和这个回复点赞。 - Ed S.
1
你是正确的,我本应该用更好的方式来表达,但算了。 - Pyrolistical

8
微观优化几乎总是错误的事情。除非程序运行过慢,你使用分析工具确定了哪些部分运行缓慢,否则不要开始微观优化。
完成这一步之后,我的建议是尝试提高代码和数据局部性,因为缓存未命中几乎肯定比次优指令更糟糕。
在这种相当奇怪的情况下,如果您可以使用基于赋值或比较的方法,请尝试两种方法并计时。微观优化是一个数字游戏。如果数字不够好,找出原因,然后验证您所做的是否有效。
那么,什么是比较呢?条件跳转会对任何现代处理器造成问题,但不同的处理器会做不同的事情,并且不能保证任何给定的处理器会减慢速度。此外,如果任何一种方法导致缓存未命中,那么无论如何都可能更慢。
最后,语言通常被编译成机器码,简单的比较和赋值通常会被编译成相同的代码。大的区别将是CPU的类型。

我并没有积极地进行微优化,这只是在看到一些部分排序然后比较的算法后产生的好奇心。 - cmsjr
好的,但是自从我进入这个领域以来,关于哪些操作更快的问题变得更加复杂了。现代处理器非常复杂且难以预测。 - David Thornley
1
虽然提供的答案是实用的,但完全避开了问题 :| - Darioush
3
这显然是一个假设性问题,因此提供微观优化方面的讲解是不合适的。 - Will Calderwood
@WillCalderwood 我觉得他们在如此抽象的情境下提供了正确的答案,可能有些参数使得在某个实例中赋值更快,在另一个实例中比较更快。这个想法是,如果它没有出问题,就不要修复它——程序员往往对他们的代码感到非常自豪,有时这会影响到功能目标。 - spencer.pinegar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接