So wie ich es verstanden habe, wird die Funktion realloc(), wenn sie aufgefordert wird, einen größeren Speicherblock zu reservieren, eine von drei verschiedenen Möglichkeiten nutzen:
if free contiguous block exists
grow current block
else if sufficient memory
allocate new memory
copy old memory to new
free old memory
else
return null
Die Vergrößerung des aktuellen Blocks ist eine sehr billige Operation, also ist dies ein Verhalten, das ich gerne ausnutzen würde. Wenn ich jedoch Speicher neu zuweisen möchte, weil ich (zum Beispiel) ein Zeichen am Anfang einer bestehenden Zeichenkette einfügen möchte, möchte ich nicht, dass realloc() den Speicher kopiert. Am Ende kopiere ich die gesamte Zeichenkette mit realloc() und kopiere sie dann erneut manuell, um das erste Array-Element freizugeben.
Ist es möglich zu bestimmen, was realloc() tun wird? Wenn ja, ist es möglich, dies plattformübergreifend zu erreichen?