По крайней мере для realloc
неявно предполагается, что условие "нет необходимости в перемещении" существует и является действительным, поскольку перемещение отмечается как особый случай:
Функция realloc () изменяет размер объекта памяти, на который указывает ptr, на размер, указанный в size. Содержимое объекта должно оставаться неизменным вплоть до меньшего из новых и старых размеров. Если для нового размера объекта памяти потребуется перемещение объекта, пространство для предыдущего создания объекта освобождается.
Формулировка "если ... будет" предполагает, что это не всегда так. Конечно, вообще не требуется , чтобы реализация опускала ненужную копию.
Единственное требование для memmove
заключается в том, чтобы конечный эффект был таким же, как если бы данные были сначала скопированы во временный буфер, а затем скопированы в конечный пункт назначения. Это ограничение «как если бы» позволяет копировать перекрывающиеся области без повреждения данных (я не знаю, какая реализация действительно копирует во временный буфер).
Итак, одним словом: не указано.