首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

效率相差如此之大?解决办法

2012-02-15 
效率相差如此之大?我运行下面两段代码,#includestdio.h#includestdlib.hvoidmain(){inti1,j,k,*pp(

效率相差如此之大?
我运行下面两段代码,

#include   <stdio.h>
#include   <stdlib.h>
void   main()
{
int   i=1,j,k,*p;
p=(int   *)malloc(1000000*sizeof(int));
for(k=1;k <1001;k++)
{
for(j=0;j <1000000;j++)
*(p+j)=i++;
i=1;
}
i=999999;
printf( "%d\n ",*(p+i));
free(p);
}

#include   <stdio.h>
#include   <stdlib.h>
void   main()
{
int   i=1,k,*p,*end_p;
p=(int   *)malloc(1000000*sizeof(int));
end_p=p+999999;
for(k=1;k <1000000001;k++)
{
for(;p <=end_p;p++)
*p=i++;
i=1;
}
p=end_p-999999;
i=999999;
printf( "%d\n ",*(p+i));
free(p);
}

前面的循环了   1000*1000000   次,屏幕显示结果时用了大约6秒钟,后者循环了
1000000000*1000000   次,显示结果用了大约4秒钟,二者效率粗略计算相差了
10W~20W倍。
请大家看看我的两个对比存在明显漏洞吗?

[解决办法]
for(k=1;k <1000000001;k++)
{
for(;p <=end_p;p++)
*p=i++;
i=1;
}
p=end_p-999999;
------------------------------
是这段代码造成了前后两个程序的语义不一样。。。

上面的代码循环1001 * 1000000次,但是下面的程序除了第一次内循环了1000000次,此时的p值
= end_p + 1,再次循环的时候p的值没有reset到end_p-999999,而是在外循环结束后才作了一次无意义的reset。所以,剩下的1000000000次内循环都只做了一次比较操作,而没有实际的*p=i++;操作。。

热点排行