Ich habe einen Code, der die Größe des Speichers (durch einen Zeiger identifiziert) exponentiell erhöht.
Statt realloc()
verwende ich malloc()
gefolgt von memcpy()
...Die Zeit für Memcpy sinkt nach einem bestimmten Punkt
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;
}
So ist die Anzahl der kopierten Bytes immer exponentiell zunimmt.
Die für diese Aufgabe benötigte Zeit steigt ebenfalls fast linear mit der Größenzunahme. Nach einem bestimmten Zeitpunkt reduziert sich die Zeit jedoch schlagartig auf einen sehr kleinen Wert und bleibt dann konstant.
Ich habe Zeit für ähnlichen Code aufgezeichnet, Kopieren von Daten meines eigenen Typs.
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
Was ist der Grund für diesen Zeitverlust? Wird eine optimalere memcpy-Methode aufgerufen, wenn die Größe groß ist?
Schönes Speicherleck ... – Macmade