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优化最快

  • 相关阅读:
    爬虫——网页解析利器--re & xpath
    机器学习——决策树
    爬虫——控制台抓包和requests.post()发送请求
    爬虫——爬取Ajax动态加载网页
    爬虫——urllib爬虫模块
    从零搭建一个SpringCloud项目之Zuul(四)
    从零搭建一个SpringCloud项目之hystrix(三)
    从零搭建一个SpringCloud项目之Eureka(一)
    SpringBoot内置Tomcat启动的源码分析
    初始化Bean的扩展InitializingBean和BeanPostProcessor
  • 原文地址:https://www.cnblogs.com/Vikyanite/p/13278645.html
Copyright © 2011-2022 走看看