私がバイトptr = malloc(old_size);でメモリブロックを割り当てるために使用したと仮定します。old_size最初のheader_sizeバイトだけが意味を持ちます。サイズをに大きくしnew_sizeます。
new_sizeより大きいold_sizeおよびold_sizeより大きいheader_size。
前:
/- - - - - - - old_size - - - - - - - \
+===============+---------------------+
\-header_size-/
後:
/- - - - - - - - - - - - - - - new_size - - - - - - - - - - - - - - - - - - -\
+===============+------------------------------------------------------------+
\- header_size-/
ptr + header_sizeそこにいくつかのデータを読み取るので、後で何が保存されるかは気にしません。
方法1:直接行くnew_size
ptr = realloc(ptr, new_size);
方法2:に縮小しheader_sizeて成長するnew_size
ptr = realloc(ptr, header_size);
ptr = realloc(ptr, new_size);
方法3:新しいメモリブロックを割り当て、最初のheader_sizeバイトをコピーする
void *newptr = malloc(new_size);
memcpy(newptr, ptr, header_size);
free(ptr);
ptr = newptr;
どちらが速いですか?