【发布时间】:2010-10-02 19:29:10
【问题描述】:
使用类似的东西有什么性能差异
for(int i = 0; i < 10; i++) { ... }
和
for(int i = 0; i < 10; ++i) { ... }
或者编译器是否能够以这样一种方式进行优化,以使它们在功能相同的情况下同样快?
编辑: 之所以问这个问题是因为我与一位同事讨论过它,而不是因为我认为它在任何实际意义上都是有用的优化。它主要是学术性的。
【问题讨论】:
-
“主要是学术性的。”这说明了很多。我正在数不清这方面的问题数量,这告诉我“学者”首先提出了这个问题,而不是告诉人们如何不要让事情变得复杂,因此变得缓慢。
-
这里发布了很好的答案:stackoverflow.com/a/4706225/214296
-
只需要最基本的优化器就可以意识到可以省略无用的副作用,例如创建一个不使用的临时 POD ——尤其是在这种非常本地化的上下文中。因此,出于所有实际目的,答案应该是响亮的“不”。但是对于一个非常深入和复杂的理论讨论,有人可能会问
++i是否通过在优化通过之前减少 IR 中的指令数量来减少优化器的工作,或者是否可以先处理i++独立案例发射红外线。从编译时的角度来看,它可能很整洁。 -
...虽然从 SSA 的角度来看它变得毫无意义,因为
++i和i++都会创建新变量。
标签: c# operators performance