|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
求助下关于for循环提高运行效率的问题,先是写了一个正常的for循环嵌套,
#include<iostream>
#include<chrono>
using namespace std;
int main() {
auto start = chrono::steady_clock::now();
int a = 1;
int z = 10000;
int b = 3000;
int c = 7000;
int d = 3000;
for (int i = 0; i < 10000; i++) {
for (int j = 0; j < 10000; j++) {
d = i + j;
}
}
auto end = chrono::steady_clock::now();
chrono::duration<double, micro> elapsed = end - start;
cout << "time: " << elapsed.count() << "us" << endl;
getchar();
return 0;
}
运行时间大概为117262us。
第一次变动:将for循环中的i++和j++改成++i和++j。
依据网上百度的说明:因为后缀操作符会产生一个临时变量,并且涉及到复杂的拷贝复制,所以++i会比i++运行速度更快。
但实际变动的运行时间为117490us,反而比i++速度慢,因为只测试了一次,不排除偶然因素,但也可以看出++i和i++的效率差别并不大。
第二次变动:将i<10000改为i<z。
运行时间为180784us,时间出现了明显的增长,可能是使用了变量的原因。
第三次变动:将i<10000改为i<b+c。
依据第二次变动的理由,第三次变动不仅使用了变量,并且每次循环都进行了c+d的计算,运行时间应该高于第二次变动,但实际运行时间为134257us,低于第二次变动,高于第一次变动。
请问下出现这样情况的原因是什么。
你这些好像都是一次实验吧,会有各种因素在里面,例如windows的各种进程调度问题等等
给你一个建议:若真想这样测试,那至少需要数百上千次的试验,然后剔除明显超长的运行时间,再看他们的运行效率。若想细究,那么就要去看C语言代码的汇编程序,然后看看哪种代码的汇编指令耗时最少,这是比较精确的方法。
|
|