Как сказал @You, стандарт указывает, что memcpy и memmove должны обрабатывать этот случай без проблем;поскольку они обычно реализуются как-то вроде
void *memcpy(void *_dst, const void *_src, size_t len)
{
unsigned char *dst = _dst;
const unsigned char *src = _src;
while(len-- > 0)
*dst++ = *src++;
return _dst;
}
, у вас даже не должно быть никакого снижения производительности, кроме вызова функции;если компилятор поддерживает встроенные функции / встраивание для таких функций, дополнительная проверка может даже сделать код немного-чуть медленнее, поскольку проверка уже выполнена в то время.