怎样的memcpy是由DMA在linux处理

怎样的memcpy是由DMA在linux处理,第1张

#include #include void *mymemcpy(void *dest, const void *src, size_t n) { assert(dest!=NULL&&src!=NULL)char* tmp=(char*)destconst char*s=(const char*)srcfor(size_t i=0i

你要先找到瓶颈在哪里?

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

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

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

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

}


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

原文地址: http://outofmemory.cn/yw/7327722.html

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

发表评论

登录后才能评论

评论列表(0条)

保存