字符串数组初始化0 与memset 0 效率的分析

转自http://hi.baidu.com/yangyangye2008/blog/item/cec4da0e3007c7366159f3c1.html

最近要分析程序的性能,所以上网查了查资料,的处理下面结论:

#defineARRAYSIZE 2048

voidmain() {

    chararrayA[ARRAYSIZE]={0};

    chararrayB[ARRAYSIZE];

    memset(array,0, ARRAYSIZE);

}

char arrayA[ARRAYSIZE] = {0};
编译是先arrayA[0]赋值为0, 再调用memset初始化其他的数组元素.

char arrayA[ARRAYSIZE] = {0};
效率很难比用memset高,因为综上分析,我觉得给一块内存赋值的效率很难超越memset。

memset

语法:

#include <cstring> void * memset ( void * buffer, int ch, size_t count ) ;

memset()拷贝chbuffer的前count字符中,并返回buffer。memset()对于以某一值初始化一段内存非常有用。例如,这个命令:

const int ARRAY_LENGTH = 300 ;
char the_array [ ARRAY_LENGTH ] ;
// zero out the contents of the_array
memset ( the_array, '\0' , ARRAY_LENGTH ) ;

…是非常有效率的方法来设置the_array中的所有值为零。

下表比较了两种不同的方式来初始化字符数组:for循环和memeset()。随着初始化数据量的增加,memset()很清晰的做的更快:

耗时 for循环 memset
1000 0.016 0.017
10000 0.055 0.013
100000 0.443 0.029
1000000 4.337 0.291

你可能感兴趣的:(字符串数组初始化0 与memset 0 效率的分析)