zoukankan      html  css  js  c++  java
  • memset, fill 对bool,int 赋值的效率

    memset对bool型变量赋false比对int型变量赋0快了10倍

    fill对bool型变量赋false和对int型变量赋0效率一样

    fill对int型变量赋0比memset对int型变量赋0慢了10倍

    归结来说,以后要赋变量false的初值时,应该用bool型变量,用memset赋

    #include <cstdio>
    #include <cstring>
    #include <ctime>
    #include <algorithm>
    using namespace std;
    
    int d[2000000];
    bool d2[2000000];
    int has_train[1000][1000][2];
    bool has_train2[1000][1000][2];
    
    int main()
    {
        clock_t start, finish;
        start = clock();
        int k = 1000;
        while(k--)
        {
            memset(d, 0, sizeof(d));
        }
        finish = clock();
        printf("%f\n", (double)(finish - start) / CLOCKS_PER_SEC);
        start = clock();
        k = 1000;
        while(k--)
        {
            memset(d2, false, sizeof(d2));
        }
        finish = clock();
        printf("%f\n", (double)(finish - start) / CLOCKS_PER_SEC);
        start = clock();
        k = 1000;
        while(k--)
        {
            memset(has_train, 0, sizeof(has_train));
        }
        finish = clock();
        printf("%f\n", (double)(finish - start) / CLOCKS_PER_SEC);
        start = clock();
        k = 1000;
        while(k--)
        {
            memset(has_train2, false, sizeof(has_train2));
        }
        finish = clock();
        printf("%f\n", (double)(finish - start) / CLOCKS_PER_SEC);
        
        
        
        
        
        start = clock();
        k = 1000;
        while(k--)
        {
            fill(d, d+2000000, 0);
        }
        finish = clock();
        printf("%f\n", (double)(finish - start) / CLOCKS_PER_SEC);
        start = clock();
        k = 1000;
        while(k--)
        {
            fill(d2, d2+2000000, false);
        }
        finish = clock();
        printf("%f\n", (double)(finish - start) / CLOCKS_PER_SEC);
        start = clock();
        k = 1000;
        while(k--)
        {
            fill(has_train[0][0], has_train[0][0]+2000000, 0);
        }
        finish = clock();
        printf("%f\n", (double)(finish - start) / CLOCKS_PER_SEC);
        start = clock();
        k = 1000;
        while(k--)
        {
            fill(has_train2[0][0], has_train2[0][0]+2000000, false);
        }
        finish = clock();
        printf("%f\n", (double)(finish - start) / CLOCKS_PER_SEC);
        return 0;
    }

    //最后我尝试了直接对int型和bool型数组赋值而不使用memset和fill,发现效率和memset对int 型数组赋值0效率是一样的。

  • 相关阅读:
    java初学者之java语言主要知识点三
    C++类的对象和类的指针的区别
    win32多线程: 线程创建与结束等待
    多线程学习:win32多线程编程基本概念(转)
    C++常用数据类型和Windows常见数据类型
    VC++2017关于项目出现"const char *" 类型的实参与 "char *" 类型的形参不兼容错误的解决方法
    Linux环境下vi/vim编辑器常用命令
    c++学习笔记之类模板
    c++学习笔记之函数重载和模板理解
    c++学习笔记之多态和虚函数
  • 原文地址:https://www.cnblogs.com/thesky/p/11113306.html
Copyright © 2011-2022 走看看