首页 > 其他 > 详细

哪个f循环更快?实际测试

时间:2020-10-02 22:31:39      阅读:32      评论:0      收藏:0      [点我收藏+]

循环想必各位都有用过,那么用哪个循环效率最高呢,现在就来实际检测

测试代码如下

#include<iostream>
#include<time.h>

using namespace std;

#define cycs 500

int main(int argc,char* argv[])
{
    double avg = 0;
    int i = cycs;
    while (i--) {//for循环1号
        
        int f = clock();
        for (int a = 0; a < 9999999; a++);
        int s = clock();

        avg += ((double)s - (double)f);
        
    }
    cout << avg / cycs <<endl;
    avg = 0;
    i = cycs;
    while (i--) {//for循环2号
        
        int f = clock();
        for (int a = 1; a <= 9999999; a++);
        int s = clock();

        avg += ((double)s - (double)f);
        
    }
    cout << avg / cycs << endl;
    avg = 0;
    i = cycs;
    while (i--) {//while循环
        
        int f = clock();
        int a = 0;
        while (a < 9999999)  a++;
        int s = clock();

        avg += ((double)s - (double)f);
        
    }
    cout << avg / cycs<<endl;
    avg = 0;
    i = cycs;
    while (i--) {//dowhile循环
        

        int f = clock();
        int a = 0;
        do
        {
            a++;
        } while (a < 9999999);
        int s = clock();

        avg += ((double)s - (double)f);
    
    }
    cout << avg / cycs<<endl;
    

}

每次循环9999999次,反复运行500次取平均时间

第一轮测试结果如下,在调试模式下执行

17.054
15.276
13.15
14.916
///////
16.384
13.72
11.854
13.966
///////
17.194
14.204
11.79
13.56
//////
16.644
13.646
12.964
14.028

综合while循环最快

第二轮测试结果如下,在非调试模式下执行

14.134
14
14.382
15.09
//////
15.444
17.222
16.738
16.222
///////
15.384
15.294
14.366
14.636
//////
13.78
13.24
14.568
14.608

综合4者,4者的速度并没有太大差别

从汇编角度分析

//for循环1号,3次mov,2次jmp,1次add,1次cmp,1次jge,8条指令
mov         dword ptr [ebp-34h],0  
jmp         main+80h (04B2EB0h)  
mov         eax,dword ptr [ebp-34h]  
add         eax,1  
mov         dword ptr [ebp-34h],eax  
cmp         dword ptr [ebp-34h],98967Fh  
jge         main+8Bh (04B2EBBh)  
jmp         main+77h (04B2EA7h)  
//for循环2号,3次mov,2次jmp,1次cmp,1次jg,8条指令
mov         dword ptr [ebp-58h],1  
jmp         main+145h (04B2F75h)  
mov         eax,dword ptr [ebp-58h]  
add         eax,1  
mov         dword ptr [ebp-58h],eax  
cmp         dword ptr [ebp-58h],98967Fh  
jg          main+150h (04B2F80h)  
jmp         main+13Ch (04B2F6Ch)  
//while循环,3次mov,1次cmp,1次jge,1次add,1次jmp,7条指令
mov         dword ptr [ebp-7Ch],0  
cmp         dword ptr [ebp-7Ch],98967Fh  
jge         main+213h (04B3043h)  
mov         eax,dword ptr [ebp-7Ch]  
add         eax,1  
mov         dword ptr [ebp-7Ch],eax  
jmp         main+1FFh (04B302Fh)  
//dowhile循环,3次mov,1次add,1次cmp,1次jl,6条指令
mov         dword ptr [ebp-0A0h],0          
mov         eax,dword ptr [ebp-0A0h]  
add         eax,1  
mov         dword ptr [ebp-0A0h],eax  
cmp         dword ptr [ebp-0A0h],98967Fh  
jl          main+2CEh (04B30FEh)  

虽然for循环指令较多,但是整体时序较快,而dowhile虽然指令较少,但是时序较慢

所以实际上,各个循环的速度并没有什么差别,虽然在调试模式下会有1~2ms的差别,但是在循环次数达到9999999的情况下

基本可以说是没有差别,也不用担心<=比<更耗时间,怎么舒服就怎么用

 

哪个f循环更快?实际测试

原文:https://www.cnblogs.com/prprpr/p/13762055.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!