2012-08-11 111 views
-3

考虑下面的代码片段:哪个更快:i = i + 2或i + = 2?

for(i=0;i<10;i+=2) // 1 
for(i=0;i<2;i=i+2) // 2 

哪一个会更好用?
它在性能上有什么不同吗?

+1

你试过计时吗?你发现了什么? – Levon 2012-08-11 15:33:58

+11

第二个会更快,因为绑定是不同的。 – 2012-08-11 15:34:44

+0

@JensGustedt你能否更详细地解释一下?你的意思是2对10? – Gir 2012-08-11 15:35:26

回答

3

你的问题没有确定的答案。这取决于您的编译器在其他方面(优化级别,......)和目标平台上的智能程度。这不是C语言问题。这种语言本身并不多或少表现。它只取决于编译器从中建立什么。因此,如果性能事关重大,请对其进行测试......

否则,我的建议是,以您感觉它更具可读性的方式编写它。

2

第一个选项至少与第二个选项一样快。 尽管任何编译优化都会生成相同的汇编代码。

6

下了0.0260015秒

for (i = 0 ; i < 10000000 ; i += 2) 

这把0.0170010

for (i = 0 ; i < 10000000 ; i = i + 2) 

@MasterID虽然是正确的,当我启用 '优化代码' 都报道0.0150009秒

+0

您需要多次运行它。差异可能是由于其他东西在后台运行,操作系统中断 – Gir 2012-08-11 15:45:09

+2

我不怀疑你的时间,但我很确定他们没有表明后面的代码实际上是较慢的。在我手边只有两个编译器(gcc和clang)下,两者都产生完全相同的汇编代码。你几乎可以肯定地测量噪音。 – DSM 2012-08-11 15:45:21

+1

哇,+1,最后somone真的测试过它:D – Bugari 2012-08-11 15:47:03

2

两种表达完全相同的语义,即在C语言的抽象机器中完全相同的效果。如果一个比另一个慢,这是编译器中的一个质量缺陷。