Di solito per ottimizzare i realloc si usano dei metodi per riallocarla il minor numero di volte possibile.
Tipo allocare sempre il doppio della memoria gia' allocata e magari partire con un array gia' allocato. Hai un piccolo spreco di memoria che però ottimizza la riallocazione.
es. parti con un array di 20 char. se volessi inserire il 20°, allochi altri 20 caratteri, poi al 40° allochi altri 40 caratteri ecc...
così facendo ti risparmi molti realloc pagando un piccolo spreco di memoria.