Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 使用多个循环是否与使用一个做多件事的循环具有相同的性能?_Loops - Fatal编程技术网

Loops 使用多个循环是否与使用一个做多件事的循环具有相同的性能?

Loops 使用多个循环是否与使用一个做多件事的循环具有相同的性能?,loops,Loops,这是: int x=0; for (int i=0;i<100;i++) x++; for (int i=0;i<100;i++) x--; for (int i=0;i<100;i++) x++; return x; intx=0; 对于(int i=0;i如果将每个增量、减量、赋值和比较计算为一个操作,那么第一个示例大约有900个操作,而第二个示例大约有500个操作。也就是说,如果代码按原样执行,而不是优化。应该很明显哪一个性能更好 实际上,

这是:

int x=0;
for (int i=0;i<100;i++) 
    x++;
for (int i=0;i<100;i++) 
    x--;
for (int i=0;i<100;i++) 
    x++;
return x;
intx=0;

对于(int i=0;i如果将每个增量、减量、赋值和比较计算为一个操作,那么第一个示例大约有900个操作,而第二个示例大约有500个操作。也就是说,如果代码按原样执行,而不是优化。应该很明显哪一个性能更好


实际上,编译器可能会优化代码,也可能不会优化代码,不同语言的不同编译器在优化时所做的工作完全不同。

如果将每次递增、递减、赋值和比较计算为一个操作,第一个示例大约有900个操作,而第二个示例大约有500个操作de是按原样执行的,没有经过优化。应该很明显哪个性能更好


事实上,编译器可能会优化代码,也可能不会优化代码,不同语言的不同编译器在优化时会做完全不同的工作。

未优化:三个循环需要更长的时间,因为有三组循环操作码

优化,这取决于优化器。一个好的优化器可能足够聪明,能够意识到单循环版本中的
x++;x--;
语句相互抵消,并消除它们。一个真正聪明的优化器可能能够对单独的循环做同样的事情。一个聪明得可笑的优化器可能会发现de正在执行,只需将整个块替换为
return 100;
(请参见下面添加的注释)

但现实世界中的优化答案通常是:fuhgeddaboutit。如果你的代码正确地完成了任务,并且速度足够快,非常有用,那么就别管它。只有当实际测试表明速度太慢时,你才应该分析瓶颈,以识别瓶颈,并用更高效的代码替换它们。(或者完全使用更好的算法。)

程序员很昂贵,CPU周期很便宜,还有很多其他任务回报更高,而且编写起来也更有趣



关于“可笑的智能优化器”位:D语言提供编译时函数求值。CTFE允许您在编译时几乎使用该语言的全部功能来计算某些内容,然后仅将计算出的答案插入运行时代码。换句话说,您可以显式地将整个编译器转换为所选代码块的优化器。

Unoptimized:由于有三组循环操作码,所以三个循环需要更长的时间

优化,这取决于优化器。一个好的优化器可能足够聪明,能够意识到单循环版本中的
x++;x--;
语句相互抵消,并消除它们。一个真正聪明的优化器可能能够对单独的循环做同样的事情。一个聪明得可笑的优化器可能会发现de正在执行,只需将整个块替换为
return 100;
(请参见下面添加的注释)

但现实世界中的优化答案通常是:fuhgeddaboutit。如果你的代码正确地完成了任务,并且速度足够快,非常有用,那么就别管它。只有当实际测试表明速度太慢时,你才应该分析瓶颈,以识别瓶颈,并用更高效的代码替换它们。(或者完全使用更好的算法。)

程序员很昂贵,CPU周期很便宜,还有很多其他任务回报更高,而且编写起来也更有趣



关于“可笑的智能优化器”位:D语言提供编译时函数计算。CTFE允许您在编译时几乎使用该语言的全部功能来计算某些内容,然后仅将计算出的答案插入运行时代码。换句话说,您可以显式地将整个编译器转换为所选代码块的优化器。

您使用的语言是什么?仅供参考,编译器将优化您的实际复杂代码,与您发布的普通代码完全不同。看到了吗?您使用的语言是什么?仅供参考,编译器将优化您的实际复杂代码,与您发布的普通代码完全不同。看到了吗?
int x=0;
for (int i=0;i<100;i++){
    x++;
    x--;
    x++;
}
return x;