1 #include <common/glib.h> 2 #include <common/string.h> 3 4 5 /** 6 * @brief 将数据从src搬运到dst,并能正确处理地址重叠的问题 7 * 8 * @param dst 目标地址指针 9 * @param src 源地址指针 10 * @param size 大小 11 * @return void* 指向目标地址的指针 12 */ 13 void *memmove(void *dst, const void *src, uint64_t size) 14 { 15 const char *_src = src; 16 char *_dst = dst; 17 18 if (!size) 19 return dst; 20 21 // 当源地址大于目标地址时,使用memcpy来完成 22 if (dst <= src) 23 return memcpy(dst, src, size); 24 25 // 当源地址小于目标地址时,为防止重叠覆盖,因此从后往前拷贝 26 _src += size; 27 _dst += size; 28 29 // 逐字节拷贝 30 while (size--) 31 *--_dst = *--_src; 32 33 return dst; 34 }