算法注意点:
如果原内存在低地址并且有一部分和目标地址重叠,要从后向前拷贝,不然会出现覆盖还没拷贝的内存污染数据造成错误
void _memmove(void *pDst, const void *pSrc, size_t size) {
//pSrc与pDst共享一块内存区域
if ((pSrc < pDst) && ((char*)pSrc + size > pDst))
{
char *pszSrc = (char *)pSrc + size - 1;
char *pszDst = (char *)pDst + size - 1;
//倒着拷
while (size--) {
*pszDst-- = *pszSrc--;
}
}
else
{
char *pszSrc = (char*)pSrc;
char *pszDst = (char*)pDst;
//从头拷贝
while (size--)
{
*pszDst++ = *pszSrc++;
}
}
}