У меня есть код, который экспоненциально увеличивает размер памяти (идентифицируемой указателем).
Вместо realloc()
я использую malloc()
, за которым следует 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 при большом размере?