What is the difference between memmove and memcpy?

c, memcpy, memmove

Solution

With `memcpy`, the destination cannot overlap the source at all. With `memmove` it can. This means that `memmove` might be very slightly slower than `memcpy`, as it cannot make the same assumptions.

For example, `memcpy` might always copy addresses from low to high. If the destination overlaps after the source, this means some addresses will be overwritten before copied. `memmove` would detect this and copy in the other direction - from high to low - in this case. However, checking this and switching to another (possibly less efficient) algorithm takes time.

Problem

What is the difference between `memmove` and `memcpy`? Which one do you usually use and how?

Original source

Related problems