|
|
1
212
在Perl中,它们产生相同的操作码:
同样,在GCC中:
所以我想答案是,在许多编译器中它们是相同的。当然,对于其他一些编译器来说,情况未必如此,但很可能循环内部的代码比循环本身贵几千倍,那么谁在乎呢? |
|
|
2
55
使用gcc,它们似乎都编译成相同的汇编语言:
|
|
|
3
52
没有什么理由比另一个更喜欢一个。我确实认为
|
|
|
4
31
根据标准没有区别。65.3/1具有:
和6.5.3/2具有:
所以按照C++标准的代码:
与以下内容完全相同:
|
|
|
5
28
用于发出警告的VisualC++编译器
(常量表达式)但不适用于
我继续练习优先
|
|
|
6
26
|
|
|
7
20
带这个老编译器的turbo C
如今,gcc、VisualC(我认为几乎所有的)编译器都能很好地优化,并且很少使用4.7MHz的CPU。
那时候
在这里
|
|
|
8
13
对于所有的人来说,你不应该使用indefinde while循环,并且建议使用诸如open之类的愚蠢的东西。 古托 S(说真的,哎呀)
不能以任何其他方式有效地表示。不需要创建一个出口变量并执行黑色魔法来保持同步。 如果您喜欢更哥特式的语法,请使用一些限制范围的理智的方法。
最终速度不是那么重要 担心不同的循环结构在速度方面有多有效,这是浪费时间。通过和通过过早优化。我想不出我见过的任何情况,在我选择循环结构时,分析代码发现了瓶颈。 一般来说, 怎样 循环和 什么 循环的 你应该对可读性和简洁性进行“优化”,然后写任何最能解释问题的东西给下一个找到你的代码的可怜虫。 如果你使用了别人提到的“goto-label”技巧,而我必须使用你的代码,那么就准备睁一只眼睡觉,特别是如果你不止一次这样做,因为这类东西会 可怕地 意大利面条代码。 只是因为你 可以 创建意粉代码并不意味着你 应该 |
|
|
9
8
来自stroustrup,tc++pl(第三版),_§6.1.1:
我更喜欢
|
|
|
10
8
我听说过一次。
它来自一个AMD组装程序设计人员。他说C程序员(人们)没有意识到他们的代码效率低下。不过,他今天说,GCC的编译器非常好,让像他这样的人失业。例如,他说,并告诉我
|
|
|
11
8
如果编译器不做任何优化,
另外,你可以写一个这样的无限循环:
|
|
|
12
5
在编译语言的优化构建中,两者之间应该没有明显的区别。它们都不应该在运行时执行任何比较,它们只会执行循环代码,直到您手动退出循环(例如使用
|
|
|
13
2
理论上,A 完全地 幼稚的编译器可以将文本“1”存储在二进制文件中(浪费空间),并检查每次迭代是否1==0(浪费时间和更多空间)。
然而,在现实中,即使有了“无”优化,编译器仍然会将两者减少到相同的程度。它们还可能发出警告,因为它可能指示逻辑错误。例如,
|
|
|
14
2
我很惊讶没有人提供更直接的形式,与所需的装配相对应:
|
|
|
15
2
我很惊讶没有人经过适当的测试
因为Perl是解释语言,所以运行Perl脚本的时间不仅包括执行阶段(在本例中是相同的),而且还包括执行前的解释阶段。进行速度比较时,必须考虑这两个阶段。 幸运的是,Perl有一个 Benchmark module 我们可以使用它来实现如下基准:
请注意,我正在测试两个不同版本的无限for循环:一个比while循环短,另一个具有额外空间使其与while循环长度相同。 在带有Perl5.10.1的Ubuntu11.04 x86_64上,我得到了以下结果: Rate for for2 while for 100588/s -- -0% -2% for2 100937/s 0% -- -1% while 102147/s 2% 1% -- while循环显然是这个平台上的赢家。 在FreeBSD 8.2上,使用Perl 5.14.1的x86_64: Rate for for2 while for 53453/s -- -0% -2% for2 53552/s 0% -- -2% while 54564/s 2% 2% -- 而Loop也是这里的赢家。 在Freebsd 8.2 i386和Perl 5.14.1上: Rate while for for2 while 24311/s -- -1% -1% for 24481/s 1% -- -1% for2 24637/s 1% 1% -- 令人惊讶的是,有额外空间的for循环是这里最快的选择! 我的结论是,如果程序员正在优化速度,那么while循环应该在x86_平台上使用。显然,在优化空间时应该使用for循环。不幸的是,对于其他平台,我的结果还没有定论。 |
|
|
16
2
我很高兴看到Perl认识到
|
|
|
17
2
总结一下
|
|
|
18
1
刚刚遇到这条线(虽然晚了好几年)。 我想我找到了“for(;)”比“while(1)”更好的实际原因。 根据“2018年条形码标准”
基本上,这不是速度问题,而是可读性问题。根据代码的字体/打印方式,一段时间内的数字1可能看起来像小写字母L。 即1与L(在某些字体中,这些看起来是相同的)。 所以while(1)可能看起来像一些依赖于变量字母l的while循环。 虽然(true)也可以工作,但在一些较旧的C和嵌入式C情况下,除非包含stdbool.h,否则尚未定义true/false。 |
|
|
19
-3
我认为两者在性能上是相同的。但我更喜欢while(1)的可读性,但我质疑为什么需要无限循环。 |
|
20
-13
它们是一样的。还有许多更重要的问题需要考虑。 我的观点是,一个合适的编译器将为两个循环形式生成完全相同的代码,这一点在上面是隐含的,但不是明确的。更重要的一点是,循环结构只是任何算法运行时间的一小部分,您必须首先确保优化了该算法以及与之相关的所有其他内容。优化循环结构应该绝对位于优先级列表的底部。 |
|
|
giantjenga · 优化整数向量到二进制向量的转换 1 年前 |
|
|
Daniel Lobo · 使用约束进行优化 1 年前 |
|
Sergio · python中大量数字的乘法 2 年前 |
|
|
Sergey Dev · 临时表与表变量 2 年前 |
|
|
John · 减少C中的内存消耗++ 2 年前 |