https://flak.tedunangst.com/post/memcpy-vs-memmove
Wvoid *Wmemcpy(Wvoid * __restrict s1, const Wvoid * __restrict s2, size_t n)
{
register Wchar *r1 = s1;
register const Wchar *r2 = s2;
while (n) {
*r1++ = *r2++;
--n;
}
return s1;
}
Wvoid *Wmemmove(Wvoid *s1, const Wvoid *s2, size_t n)
{
register Wchar *s = (Wchar *) s1;
register const Wchar *p = (const Wchar *) s2;
if (p >= s) {
while (n) {
*s++ = *p++;
--n;
}
} else {
while (n) {
--n;
s[n] = p[n];
}
}
return s1;
}
memcpy vs memmove