0

In the os-dev meaty skeleton tutorial this is the implementation of memmove:

#include <string.h>


void* memmove(void* dstptr, const void* srcptr, size_t size) {
    unsigned char* dst = (unsigned char*) dstptr;
    const unsigned char* src = (const unsigned char*) srcptr;
    if (dst < src) {
        for (size_t i = 0; i < size; i++)
            dst[i] = src[i];
    } else {
        for (size_t i = size; i != 0; i--)
            dst[i-1] = src[i-1];
    }
    return dstptr;
}

They check whether the dst pointer is less than src, if so they just move the memory. If not they move the memory in reverse order. But why?

Does that handle some edge case?

Adham Zahran
  • 1,973
  • 2
  • 18
  • 35

0 Answers0