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

}

你要先找到瓶颈在哪里?

1)设备dma速率。 不要映射,直接在内核memcpy 设备DMA数据,看速率

2)mmap效率。 不要用DMA的内存做映射,用内核申请的内存做映射,然后在用户控件memcpy,看速率

3)用户memcpy效率。这个你已经测试过了,不是问题


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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存