Pourquoi Linux memmove () est-il implémenté comme il est?

À partir de la page de manuel Linux pour memmove(3)

La memmove() de la fonction de copie n octets de la zone mémoire de la src à la zone de mémoire de destination.
Les zones de mémoire peuvent se chevaucher: la copie se passe comme si les octets de src sont
d'abord copié dans un tableau temporaire qui n'a pas de chevauchement de la src ou de destination, et le
les octets sont alors copiés à partir du tableau temporaire dest.

Au lieu d'allouer un tableau temporaire et de copier les valeurs de deux fois nous pourrions nous contenter de faire ce qui suit:

void *my_memmove(void *dest, const void *src, size_t n) {
  signed char operation;
  size_t end;
  size_t current;

  if(dest != src) {
    if(dest < src) {
      operation = 1;
      current = 0;
      end = n;
    } else {
      operation = -1;
      current = n - 1;
      end = -1;
    }

    for( ; current != end; current += operation) {
      *(((unsigned char*)dest) + current) = *(((unsigned char*)src) + current);
    }
  }
  return dest;
}

Dans cette implémentation, nous avons tout simplement prendre soin de la position où nous commençons à copier.

Est-il un inconvénient à mon application?

Note: je ne vais pas réellement utiliser mon application. Je suis juste curieux.

source d'informationauteur MarcDefiant