私がバイト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;
どちらが速いですか?