刚刚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来完成初始化工作。但,最根本还是应该减少计算机的计算量。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。