这个问题与这 两个循环体或一个(结果相同)相同, 但在我的情况下,我使用Java.
我有两个循环,运行十亿次.
int a = 188, b = 144, aMax = 0, bMax = 0;
for (int i = 0; i < 1000000000; i++) {
int t = a ^ i;
if (t > aMax)
aMax = t;
}
for (int i = 0; i < 1000000000; i++) {
int t = b ^ i;
if (t > bMax)
bMax = t;
}
Run Code Online (Sandbox Code Playgroud)
在我的机器中运行这两个循环所需的时间是4秒.当我将这两个循环融合到一个循环中并在该单循环中执行所有操作时,它将在2秒内运行.正如您所看到的那样,琐碎的操作构成了循环内容,因此需要恒定的时间.
我的问题是我在哪里获得这种性能提升?
我猜测性能在两个独立的循环中受影响的唯一可能的地方是它增加i并检查我是否<1000000000 20亿次而不是10亿次如果我将循环融合在一起.还有其他事吗?
谢谢!
我发现了一个有趣的现象:
#include<stdio.h>
#include<time.h>
int main() {
int p, q;
clock_t s,e;
s=clock();
for(int i = 1; i < 1000; i++){
for(int j = 1; j < 1000; j++){
for(int k = 1; k < 1000; k++){
p = i + j * k;
q = p; //Removing this line can increase running time.
}
}
}
e = clock();
double t = (double)(e - s) / CLOCKS_PER_SEC;
printf("%lf\n", t);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在i5-5257U Mac OS上使用GCC 7.3.0来编译代码 …