realloc pero solo los primeros bytes son significativos

Asume que he usadoptr = malloc(old_size); para asignar un bloque de memoria conold_size bytes Solo la primeraheader_size Los bytes son significativos. Voy a aumentar el tamaño paranew_size.

new_size es mayor queold_size yold_size es mayor queheader_size.

antes de:

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

después:

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

No me importa lo que se almacena despuésptr + header_size Porque voy a leer algunos datos hasta allí.

Método 1: ir directamente anew_size
ptr = realloc(ptr, new_size);
método 2: reducir aheader_size y crecer paranew_size
ptr = realloc(ptr, header_size);
ptr = realloc(ptr, new_size);
Método 3: asignar un nuevo bloque de memoria y copiar el primeroheader_size bytes
void *newptr = malloc(new_size);
memcpy(newptr, ptr, header_size);
free(ptr);
ptr = newptr;

¿Cual es mas rápido?

Respuestas a la pregunta(3)

Su respuesta a la pregunta