I don't understand, if there's not enough space to realloc in place you have to move it. Is there another option?

> In the WinAPI, HeapReAlloc has the parameter HEAP_REALLOC_IN_PLACE_ONLY which can be used.

The  docs say:

"If this value is specified and the block cannot be resized without moving, the function fails"

Why is that good?