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

  • 相关阅读:
    翻译《Writing Idiomatic Python》(三):变量、字符串、列表
    Jetson TK1刷机+配置Mini PCI-e无线网卡
    翻译《Writing Idiomatic Python》(二):函数、异常
    翻译《Writing Idiomatic Python》(一):if语句、for循环
    用Python和摄像头制作简单的延时摄影
    安卓加固之so文件加固
    Windbg+VirtualBox双机调试环境配置(XP/Win7/Win10)
    Sizeof Class
    32位和64位系统内核函数调用从ZwProtectVirtualMemory到NtProtectVirtualMemory
    JNI注册调用完整过程-安卓4.4
  • 原文地址:https://www.cnblogs.com/Vikyanite/p/13278645.html
Copyright © 2011-2022 走看看