【发布时间】:2016-01-27 18:08:15
【问题描述】:
我有两个循环。我不明白为什么第一个比我的第二个跑得快。能尽量简单解释吗?
第一:
for (int x1=0;x1<1000;x1++){
for(int x2=0;x2<1000;x2++){
if(x1<500){
a[x2+x1*1000]=100;
}
}
}
第二:
bool cond;
for (int x1=0; x1<1000; x1++) {
cond = x1<500;
for(int x2=0; x2<1000; x2++){
if(cond){
a[x2+x1*1000] = 100;
}
}
}
(我简化了我的代码)
【问题讨论】:
-
慢/快多少?显示实际基准。如果差异很小,则可能几乎是所有问题(包括由您无法影响的操作系统引起的低效率),并且可以良心忽略。
-
在我的代码中,这个表达式会导致 %30 的代码变慢
-
显示实际基准。但不可否认,这并不小。
-
对不起,我不是很有经验的代码编写者,我只是想提高我的代码运行时间。我引用了一个循环的时间恶化
-
任何体面的优化器都应该将任一测试提升到内部循环之外,因此应该没有性能差异。查看生成的 asm 代码将是了解优化器是否被一个版本而不是另一个版本混淆的最佳方法。
标签: c++ performance for-loop