linux内核中memcpy和memmove函数的区别和实现

linux内核中memcpy和memmove函数的区别和实现,第1张

memcpy的效率会比memmove高一些,如果还不明白的话可以看一些两者的实现,平时很少有重叠的例子,所以只有特殊情况才考虑memmove

void *memmove(void *dest, const void *source, size_t count)

{

assert((NULL != dest) &&(NULL != source))

char *tmp_source, *tmp_dest

tmp_source = (char *)source

tmp_dest = (char *)dest

if((dest + count<source) || (source + count) <dest))

{// 如果没有重叠区域

while(count--)

*tmp_dest++ = *tmp_source++

}

else

{ //如果有重叠

tmp_source += count - 1

tmp_dest += count - 1

while(count--)

*--tmp_dest = *--tmp

}

return dest

}

void *memcpy(void *dest, const void *source, size_t count)

{

assert((NULL != dest) &&(NULL != source))

char *tmp_dest = (char *)dest

char *tmp_source = (char *)source

while(count --)//不对是否存在重叠区域进行判断

*tmp_dest ++ = *tmp_source ++

return dest

}

memcpy_s包含在string.h头文件中

另外memcpy_s函数,在C11开始才加入C标准,所以编译器要支持C11才能正常使用


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8601775.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-18
下一篇2023-04-18

发表评论

登录后才能评论

评论列表(0条)

    保存