当前位置: 首页 > >

测了一下fill和memset的速度

发布时间:

别问,问就是因为一只蝙蝠。




首先介绍一下今天的测试对象


memset:memset是计算机中C/C++语言初始化函数。作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。
fill:按照单元赋值,将一个区间的元素都赋同一个值。


按照文档说明,memset是按字节进行初始化,fill是按照单元来填充。
有些情况下用memset初始化数组会出现神奇但不离谱的错误,想用fill又怕超时(文档还找不到时间说明x),所以自己测试一下用fill代替memset进行初始化的时间损耗。


因为懒所以借用了洛谷的A+B Problem题来测,3ms左右的时间误差问题不大


第一组:memset

#include
#include
#include
#include
using namespace std;

int lis[20000000];

int main(){
memset(lis,0,sizeof(lis));
int a,b;
scanf("%d %d",&a,&b);
printf("%d",a+b);
return 0;
}

将容量20000000的一个int数组初始化为0,测出*均用时61ms。
将容量20000000的一个int数组初始化为-1,测出*均用时58ms。
将容量20000000的一个int数组初始化为0x3f3f3f3f,测出*均用时61ms。






第二组:fill

#include
#include
#include
#include
using namespace std;

int lis[20000000];

int main(){
fill(lis,lis+20000000,0);
int a,b;
scanf("%d %d",&a,&b);
printf("%d",a+b);
return 0;
}

将容量20000000的一个int数组初始化为0,测出*均用时104ms。
将容量20000000的一个int数组初始化为-1,测出*均用时104ms。
将容量20000000的一个int数组初始化为0x3f3f3f3f,测出*均用时105ms。


可以看到fill的用时几乎是memset的两倍。。。


memset确实nb






然后我用同样的条件又测了下for循环直接赋值0x3f3f3f3f,时间大概在103ms左右。
跟直接fill差不多。。。




菜鸡落泪。



友情链接: