Is while faster than for?

Is while faster than for?

本文关键字:for than faster while Is      更新时间:2023-10-16

正如我在学校学到的那样,循环for比循环while快,但有人告诉我循环while更快。

我必须优化程序,我想写while而不是for,但我担心它会更慢?

例如,我可以更改for循环:

for (int i=0; i<x; i++)
{
cout<<"dcfvgbh"<<endl;
}

进入while循环:

i=0;
while (i<x)
{
cout<<"dcfvgbh"<<endl;
i++;
}

标准要求(§6.5.3/1):

for语句
for(对于init语句条件opt;表达式option)语句
等效于

{
for-init-statement
while ( condition ) {
statement
expression;
}
}

因此,您不太可能看到它们之间的差异(即使执行时间不一定是标准中指定的等效性的一部分)。也列出了一些等价的例外情况(名称的作用域,如果执行continue,则在计算条件之前执行表达式)。至少从理论上讲,在某些条件下,后者可能会对速度产生一点影响,但可能不足以引起注意或关注,除非你在循环中实际使用了continue,否则绝对不会。

就所有意图和目的而言,for只是编写while的一种奇特方式,因此无论哪种方式都没有性能优势。使用其中一个而不是另一个的主要原因是如何翻译意图,以便读者更好地了解循环实际在做什么。

不,不是。

它并不快。

cout将占用该循环99%的时钟周期。小心微观优化。无论如何,这两者将给出基本相同的代码。

for循环可以更快的唯一时间是当您有已知的终止条件时,例如

for(ii = 0; ii < 24; ii++)

因为一些优化编译器将执行CCD_ 15。这意味着它们不会在每次通过环路时都进行测试;参见";只在循环内做24次(或在4个块中做6次等)会稍微高效一点。当循环内的东西非常小(例如jj += ii;)时,这种优化使for循环比while(通常不进行"展开")快一点。

否则——没有区别。

应@zeroth 的请求更新

来源:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.47.9346&rep=rep1&type=pdf

报价来源(我的重点):

在源代码级别展开循环涉及到循环结构(例如for、while、do-while等)循环计数,以确保它是一个计数循环,复制环路主体和对展开环路的环路计数的调整。A.也可以插入序言或尾声代码。使用这种方法,很难展开使用while和goto形成的循环语句,因为循环计数不明显。然而,除了这种方法是最简单的循环,既乏味又容易出错。

另一种选择是自动展开循环。自动的展开可以在源代码早期完成,在未优化的代码后期完成中间表示,或非常晚才优化程序的表示如果是在源代码级别完成的,那么通常只有使用for语句形成的计数循环展开。使用其他控制结构形成的展开循环这是困难的,因为循环计数不明显

据我所知,将for循环替换为while循环并不是一种既定的优化技术。

你的两个例子在性能上是相同的,但作为练习,你可以给它们计时,以自己确认这一点。