memset效率测试

刚刚AC了一题,需要将数组部分初始化为零,为了简单我就用memset将整个数组置零了,在我印象中memset函数的速度是快得惊人的,没想到居然超时了,让我不得不重新审视memset的效率和我那想当然的愚昧。

初始化部分如下:#include<stdio.h> #define MAX 1000 int ndata[ MAX ][ MAX ]; int main() { char a[MAX]; char b[MAX]; int i , j; int nTemp = 10000; i = nTemp, j = nTemp; double BegTime , EndTime; BegTime = clock(); while( i-- ) { memset( ndata, 0, sizeof(int) * MAX * MAX ); } EndTime = clock(); printf(" %g s \n ", (EndTime - BegTime ) / 1000/1000); BegTime = clock(); while( nTemp-- ) { for ( i = 0; i <= MAX; i++) ndata[i][0] = 0; for ( j = 0; j <= MAX; j++) ndata[0][j] = 0; } EndTime = clock(); printf(" %g s \n ", (EndTime - BegTime ) / 1000/1000); return 0; }

3.75s

0.11s

速度相差了三十倍,难怪会超时,为了知道memset的效率,又试了下如下案例


#include<stdio.h> #define MAX 1000 int ndata[ MAX ][ MAX ]; int main() { char a[MAX]; char b[MAX]; int i , j; int nTemp = 10000; i = nTemp, j = nTemp; double BegTime , EndTime; BegTime = clock(); while( i-- ) { memset( ndata, 0, sizeof(int) * MAX * MAX ); } EndTime = clock(); printf(" %g s \n ", (EndTime - BegTime ) / 1000/1000); BegTime = clock(); while( nTemp-- ) { /* for ( i = 0; i <= MAX; i++) ndata[i][0] = 0; for ( j = 0; j <= MAX; j++) ndata[0][j] = 0; */ for ( i = 0; i < MAX; i++) for ( j = 0; j < MAX; j++) ndata[i][j] = 0; } EndTime = clock(); printf(" %g s \n ", (EndTime - BegTime ) / 1000/1000); return 0; }
上述代码就为了初始化一个大数组,执行结果如下:

3.58s

24.8s


测试结果表明:memset比普通的初始化快7倍,所以应该多用memset来完成初始化工作。但,最根本还是应该减少计算机的计算量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值