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?