【发布时间】:2010-10-27 12:28:59
【问题描述】:
长版...
一位同事今天在看到我在 Perl 脚本中使用 while (1) 后断言 for (;;) 更快。我认为它们应该是相同的,希望解释器能够优化任何差异。我设置了一个脚本,它将运行 1,000,000,000 次循环迭代和相同数量的 while 循环并记录其间的时间。我找不到明显的区别。我的同事说,一位教授告诉他while (1) 正在比较1 == 1 而for (;;) 不是。我们用 100 倍的 C++ 迭代次数重复了相同的测试,差异可以忽略不计。然而,它是一个图形示例,说明编译代码与脚本语言相比要快多少。
短版...
如果您需要跳出无限循环,有什么理由更喜欢while (1) 而不是for (;;)?
注意:如果从问题中不清楚。这纯粹是几个朋友之间有趣的学术讨论。我知道这不是一个所有程序员都应该为之苦恼的超级重要的概念。感谢所有出色的答案,我(我相信其他人)从这次讨论中学到了一些东西。
更新:上述同事在下面给出了回应。
在此引用以防被掩埋。
它来自一位 AMD 汇编程序员。他说 C 程序员 (人们)没有意识到他们的代码效率低下。他说 不过今天,gcc 编译器非常好,把他这样的人淘汰了 的业务。例如,他说,并告诉我
while 1vsfor(;;)。我现在出于习惯使用它,但 gcc 尤其是口译员 这两天都将执行相同的操作(处理器跳转), 因为它们已经过优化。
【问题讨论】:
-
我很好奇。为什么在 perl 脚本中需要无限循环?您显然不是在编写驱动程序或系统的东西... Infinite 很安静:-)
-
哪个无限循环最快?大声笑...“我的新电脑速度非常快,不到一个小时就无限循环...”;-)
-
是社会学教授告诉他的吗?在现代,您输入的代码并不是计算机最终看到的。
-
我希望您测试它所花费的时间远远长于知道哪个更快(如果有的话)可能节省的时间。即使你在你的编程生涯中分期付款。
-
为什么编译器会生成代码来执行它知道没有副作用并且编译器已经知道其结果的测试?这没有任何意义。
标签: c++ perl optimization performance