Can some one help me to understand how memmove is implemented in C. I have only one special condition right ?
if((src<dst)&&((src+sz) > dst))
copy from the back
Also does it depend on the way stack grows ?
Mathematically, you don't have to worry about whether they overlap at all. If src
is less than dst
, just copy from the end. If src
is greater than dst
, just copy from the beginning.
If src
and dst
are equal, just exit straight away.
That's because your cases are one of:
1) <-----s-----> start at end of s
<-----d----->
2) <-----s-----> start at end of s
<-----d----->
3) <-----s-----> no action
<-----d----->
4) <-----s-----> start at beginning of s
<-----d----->
5) <-----s-----> start at beginning of s
<-----d----->
Even if there's no overlap, that will still work fine, and simplify your conditions.
If you have a more efficient way to copy forwards than backwards then, yes, you should check for overlap to ensure you're using the more efficient method if possible. In other words, change option 1 above to copy from the beginning.