realloc aber nur die ersten paar bytes sind sinnvoll

Angenommen, ich habe verwendetptr = malloc(old_size); Zuweisen eines Speicherblocks mitold_size Bytes. Nur der ersteheader_size Bytes ist sinnvoll. Ich werde die Größe auf erhöhennew_size.

new_size ist größer alsold_size undold_size ist größer alsheader_size.

Vor:

/- - - - - - - old_size - - - - - - - \
+===============+---------------------+
 \-header_size-/

nach dem:

/- - - - - - - - - - - - - - - new_size - - - - - - - - - - - - - - - - - - -\
+===============+------------------------------------------------------------+
\- header_size-/

Es ist mir egal, was danach gespeichert wirdptr + header_size weil ich dort ein paar daten lesen werde.

Methode 1: Gehe direkt zunew_size
ptr = realloc(ptr, new_size);
Methode 2: schrumpfen aufheader_size und wachsen zunew_size
ptr = realloc(ptr, header_size);
ptr = realloc(ptr, new_size);
Methode 3: weisen Sie einen neuen Speicherblock zu, und kopieren Sie den erstenheader_size Bytes
void *newptr = malloc(new_size);
memcpy(newptr, ptr, header_size);
free(ptr);
ptr = newptr;

Welche ist schneller?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage