メモリ(ポインタで識別される)のサイズを指数関数的に増加させるコードがあります。
代わりのrealloc()
は、私がこのようにコピーされたばかりのバイト数が指数関数的に増加している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;
}
続いmalloc()
を使用しています。
この作業に必要な時間も、サイズの増加に伴ってほぼ直線的に増加します。しかし、特定の時点の後に、急に取られた時間は非常に小さい値に減少し、その後も一定のままです。
私は自分のタイプのデータをコピーする同様のコードの時間を記録しました。
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