Rozumiem, że różnica między memmove
i polega na tym, że memmove
obsługuje przypadek nakładania się pamięci. Sprawdziłem implementację w libgcc i dostałem ten artykuł [memcpy performance] ze strony internetowej intel.W jakiej platformie memmove i memcpy mogą mieć znaczną różnicę wydajności?
W bibliotece libgcc, memmove
jest podobna do memcpy
, obie mają tylko jeden bajt i bajt, więc wydajność powinna być prawie taka sama nawet po optymalizacji.
Ktoś zmierzył to i dostał ten artykuł memcopy, memmove, and Speed over Safety. Nawet nie sądzę, że memmove
może być szybszy niż memcpy
, ale nie powinno być dużej różnicy przynajmniej na platformie Intel
.
Więc w jakiej platformie i jak memcpy
może być znacznie szybciej niż memmove
, jeśli nie ma, dlaczego zapewniając dwie podobne funkcje, a nie tylko memmove
i prowadzić do wielu błędów.
Edytuj: Nie zadaję różnicy memmove i memcpy, wiem, że memmove może obsłużyć problem nakładania się. Chodzi o to, czy naprawdę istnieje platforma, w której memcpy jest szybszy niż memmove?
Jeśli dobrze pamiętam istnieją pewne kwestie związane z nakładających pamięć adresów –
Istnieje wiele pytań już na 'memcpy' vs.' memmove' (patrz pasek "Powiązane" po prawej). Czy jesteś pewien, że twoje pytanie nie jest już objęte jednym z nich? –
Standardem jest ** nie ** o platformie Intela. –