我有一個代碼,它以指數方式增加內存大小(由指針標識)。
相反的realloc()
,我用malloc()
其次memcpy()
...memcpy在特定點後減少的時間
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方法?
不錯的內存泄漏... – Macmade 2012-04-02 11:23:27