ASIDE 发表于 2020-9-23 10:15:35

有关C++中for循环运行速度的问题

求助下关于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,低于第二次变动,高于第一次变动。
请问下出现这样情况的原因是什么。

sunrise085 发表于 2020-9-23 10:23:57

你这些好像都是一次实验吧,会有各种因素在里面,例如windows的各种进程调度问题等等
给你一个建议:若真想这样测试,那至少需要数百上千次的试验,然后剔除明显超长的运行时间,再看他们的运行效率。若想细究,那么就要去看C语言代码的汇编程序,然后看看哪种代码的汇编指令耗时最少,这是比较精确的方法。

Peteryo01223 发表于 2020-9-23 11:01:33

c语言,不知道此生是否有机会学。
页: [1]
查看完整版本: 有关C++中for循环运行速度的问题