zoukankan      html  css  js  c++  java
  • 关于循环赋值、memset与fill的效率测试

    最近一直在做图论的题目。对于初始化的效率要求比较高。正巧我也对这三个函数不是很清楚。

    就写了个测试程序来测试效率

    测试程序:

    #include <bits/stdc++.h>
    //#pragma GCC optimize(2)
    using namespace std;
    
    #define max 100000000+5
    int a[max];
    int main()
    {
        time_t beg,end;
    
        cout<<"---------------------------for
    ";
        beg=clock();
        for(int i=0;i<max;++i) a[i]=0;
        end=clock();
        cout<<"test 1 cost: "<<end-beg<<"MS"<<endl;
        beg=clock();
        for(int i=0;i<max;++i) a[i]=0;
        end=clock();
        cout<<"test 2 cost: "<<end-beg<<"MS"<<endl;
        beg=clock();
        for(int i=0;i<max;++i) a[i]=0;
        end=clock();
        cout<<"test 3 cost: "<<end-beg<<"MS"<<endl;
        beg=clock();
        for(int i=0;i<max;++i) a[i]=0;
        end=clock();
        cout<<"test 4 cost: "<<end-beg<<"MS"<<endl;
        beg=clock();
        for(int i=0;i<max;++i) a[i]=0;
        end=clock();
        cout<<"test 5 cost: "<<end-beg<<"MS"<<endl;
        beg=clock();
        for(int i=0;i<max;++i) a[i]=0;
        end=clock();
        cout<<"test 6 cost: "<<end-beg<<"MS"<<endl;
    
        cout<<"----------------register---for
    ";
        beg=clock();
        for(register int i=0;i<max;++i) a[i]=0;
        end=clock();
        cout<<"test 1 cost: "<<end-beg<<"MS"<<endl;
        beg=clock();
        for(register int i=0;i<max;++i) a[i]=0;
        end=clock();
        cout<<"test 2 cost: "<<end-beg<<"MS"<<endl;
        beg=clock();
        for(register int i=0;i<max;++i) a[i]=0;
        end=clock();
        cout<<"test 3 cost: "<<end-beg<<"MS"<<endl;
        beg=clock();
        for(register int i=0;i<max;++i) a[i]=0;
        end=clock();
        cout<<"test 4 cost: "<<end-beg<<"MS"<<endl;
        beg=clock();
        for(register int i=0;i<max;++i) a[i]=0;
        end=clock();
        cout<<"test 5 cost: "<<end-beg<<"MS"<<endl;
        beg=clock();
        for(register int i=0;i<max;++i) a[i]=0;
        end=clock();
        cout<<"test 6 cost: "<<end-beg<<"MS"<<endl;
    
        cout<<"---------------------------fill
    ";
        beg=clock();
        fill(a,a+max,0);
        end=clock();
        cout<<"test 1 cost: "<<end-beg<<"MS"<<endl;
        beg=clock();
        fill(a,a+max,0);
        end=clock();
        cout<<"test 2 cost: "<<end-beg<<"MS"<<endl;
        beg=clock();
        fill(a,a+max,0);
        end=clock();
        cout<<"test 3 cost: "<<end-beg<<"MS"<<endl;
        beg=clock();
        fill(a,a+max,0);
        end=clock();
        cout<<"test 4 cost: "<<end-beg<<"MS"<<endl;
        beg=clock();
        fill(a,a+max,0);
        end=clock();
        cout<<"test 5 cost: "<<end-beg<<"MS"<<endl;
        beg=clock();
        fill(a,a+max,0);
        end=clock();
        cout<<"test 6 cost: "<<end-beg<<"MS"<<endl;
    
        cout<<"---------------------------memset
    ";
        beg=clock();
        memset(a,0,sizeof(a));
        end=clock();
        cout<<"test 1 cost: "<<end-beg<<"MS"<<endl;
        beg=clock();
        memset(a,0,sizeof(a));
        end=clock();
        cout<<"test 2 cost: "<<end-beg<<"MS"<<endl;
        beg=clock();
        memset(a,0,sizeof(a));
        end=clock();
        cout<<"test 3 cost: "<<end-beg<<"MS"<<endl;
        beg=clock();
        memset(a,0,sizeof(a));
        end=clock();
        cout<<"test 4 cost: "<<end-beg<<"MS"<<endl;
        beg=clock();
        memset(a,0,sizeof(a));
        end=clock();
        cout<<"test 5 cost: "<<end-beg<<"MS"<<endl;
        beg=clock();
        memset(a,0,sizeof(a));
        end=clock();
        cout<<"test 6 cost: "<<end-beg<<"MS"<<endl;
        return 0;
    }
    View Code

     开启o2优化之后

    综上,当需要数组初始化为0,-1,inf时,memset最快,

    其他时候,循环赋值 + O2优化最快

  • 相关阅读:
    系列之前端:从重复造轮子说起
    Asp.Net Core基于JWT认证的数据接口网关Demo
    通过编写一个简单的日志类库来加深了解C#的文件访问控制
    .net core 的图片处理及二维码的生成及解析
    svmtrain和svmpredict简介
    svm小问题
    SVM (support vector machine)
    ubuntu在windows下的wubi安装
    ubuntu在windows下的wubi安装
    [转]无需看到你的脸就能认出你——实现Beyond Frontal Faces: Improving Person Recognition Using Multiple Cues
  • 原文地址:https://www.cnblogs.com/Vikyanite/p/13278645.html
Copyright © 2011-2022 走看看