我有一段代码,可以按指针指向的内存指数级增加大小。
我使用malloc()
函数和memcpy()
函数代替realloc()
函数...
int size=5,newsize;
int *c = malloc(size*sizeof(int));
int *temp;
while(1)
{
newsize=2*size;
//begin time
temp=malloc(newsize*sizeof(int));
memcpy(temp,c,size*sizeof(int));
//end time
//print time in mili seconds
c=temp;
size=newsize;
}
因此,复制的字节数呈指数增长。
随着大小的增加,执行此任务所需的时间也几乎呈线性增长。然而,在某个点之后,所需的时间突然降低到一个非常小的值,然后保持不变。
我记录了类似代码的时间,复制了自己类型的数据。
5 -> 10 - 2 ms
10 -> 20 - 2 ms
.
.
2560 -> 5120 - 5 ms
.
.
20480 -> 40960 - 30 ms
40960 -> 91920 - 58 ms
367680 -> 735360 - 2 ms
735360 -> 1470720 - 2 ms
1470720 -> 2941440 - 2 ms
这个时间降低的原因是什么?当大小较大时,是否调用了更优化的memcpy方法?