只是为了好奇,哪个过程最快:将值设置为布尔值(例如:将其从true更改为false)或简单检查其值(例如:if(boolean)...)
答案 0 :(得分:2)
我认为这完全依赖于上下文:
这个问题最终没有意义。
答案 1 :(得分:2)
我遇到的问题"这是最快的"是因为他们太过不明确,实际上没有得到最终的回答,同时也过于宽泛,无法得出有用的结论,即使最终得到了回答。您的好奇心可以采取的唯一富有成效的途径是构建机器的心理模型,并通过它运行两种情况。
foo = true
将值true
存储到分配给foo
的位置。这提出了一个问题:foo
存储在何处以及如何存储?如果没有使用正确的设置通过编译器实际运行完整的源代码,则无法回答这个问题。它可以在RAM中的任何位置,也可以在寄存器中,或者根本不使用存储,通过编译器优化完全消除。取决于foo
所在的位置,覆盖它的成本可能会有所不同:数百个CPU周期(如果在RAM中而不在缓存中),几个周期(在RAM和缓存中),一个周期(寄存器),零周期(未存储)。
if (foo)
通常意味着阅读foo
,然后根据它执行条件分支。关于我在这里讨论的方面(我必须省略许多细节和一些主要类别),阅读实际上就像写作一样。随后的条件分支具有更低的可预测性,因为其成本取决于程序的运行时行为。如果始终采用分支,branch prediction将使其几乎空闲(几个周期)。如果它不可预测,可能需要数十个周期并吹掉管道(进一步降低吞吐量)。但是,条件代码也可能是predicated,从而无视上述大多数问题,并将其替换为有关指令延迟,数据依赖性和管道的血腥细节的推理。
正如你可以从关于它的大量文章中看到的那样(尽管省略了许多细节甚至一些重要的次要影响),但在任何普遍性中几乎不可能真正回答这个问题。您需要查看具体的,完整的程序来进行任何类型的预测,并且您需要从上到下了解整个系统。请注意,我必须假设一种非常特殊的机器才能实现这一目标:对于GPGPU或嵌入式系统或90年代早期的消费者CPU,我不得不重写几乎所有这些。< / p>