私が理解しているように、より大きなメモリブロックを予約するように求められると、realloc()関数は次の3つの異なることのいずれかを実行します。
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
現在のブロックを拡張するのは非常に安価な操作なので、これを利用したい動作です。ただし、(たとえば)既存の文字列の先頭にcharを挿入したいためにメモリを再割り当てしている場合は、realloc()にメモリをコピーさせたくありません。最終的には、realloc()を使用して文字列全体をコピーしてから、手動で再度コピーして、最初の配列要素を解放します。
realloc()が何をするかを決定することは可能ですか?もしそうなら、クロスプラットフォームの方法で達成することは可能ですか?