Dlaczego nie ma standardowej c funkcję memswap, który prawdopodobnie będzie wyglądać następująco:Dlaczego nie istnieje standardowa funkcja memswap
int memswap(void *ptr1, void *ptr2, size_t nbytes)?
wiem, że to będzie łatwe do napisania, ale myślę, libc może zrobić niesamowite sztuczki, aby przyspieszyć, jak niektóre implementacje robią to dla memcpy.
Najlepszy algorytm niekoniecznie musi być twój.GCC ma 'memset' jako słowo kluczowe, i na podstawie tego, co to jest, w którym zapisujesz, może opuścić wywołanie funkcji lub mieć pętlę for lub mieć rozwiniętą pętlę for itp. Kompilatory są teraz inteligentne. – Claudiu
Naturalne wyniki to: nakładanie się -> UB, długość == 0 -> no-op, powinno być na miejscu, prawdopodobnie przy użyciu ustalonej ilości stosów, zerowa wskazówka -> UB. Nic w tym dziwnego. – Deduplicator
Zgadzam się, że najlepszy algorytm może zależeć od tego, co robisz, ale możesz również napisać tę funkcję 'memswap' bez bufora dynamicznego, kopiowanie char-by-char (sizeof (char) = 1byte) – Zorgatone