1、memcpy函数原型
void *memcpy(void *dst, const void * src, size_t count)
{
assert((dst != NULL) && (src != NULL));
char *tmp_dst = (char *)dst;
chat *tmp_src = (char *)src;
while(count--)
*tmp_dst++ = *tmp_src++;
return dst;
}
2、memmove函数原型
void *memmove(void *dst, const void * src, size_t count)
{
assert((dst != NULL) && (src != NULL));
char *tmp_dst = (char *)dst;
char *tmp_src = (char *)src;
if (tmp_dst + count < src || tmp_src + count < dst)
{
while (count--)
*tmp_dst++ = *tmp_src++;
}
else
{
tmp_dst += count - 1;
tmp_src += count - 1;
while (count--)
*tmp_dst-- = *tmp_src--;
}
return dst;
}
3、区别
a.从代码上看,在频繁使用内存拷贝的地方,memcpy比memmove执行效率更高;
b.memmove比memcpy更安全,因为memmove判断了dest和src是否会重叠的情况,确保能正确拷贝到dest,但是这里需要注意,src会被修改!
本文详细解析了memcpy和memmove两个内存操作函数的实现原理及使用场景。memcpy适用于非重叠区域的快速复制,而memmove则能处理目标和源地址可能重叠的情况,虽然执行效率稍逊,但提供了更安全的内存移动方案。

317

被折叠的 条评论
为什么被折叠?



