memset, fill 对bool,int 赋值的效率

Posted thesky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

 

技术图片

 

以上是关于memset, fill 对bool,int 赋值的效率的主要内容,如果未能解决你的问题,请参考以下文章

fill,fill-n,memset的区别

# memset批量赋值

在 2D int 向量上使用 std::fill

memset的用法

关于memset()

向量上的 memset<int>