读书人

小弟我写的一个memcpy大神看一上指

发布时间: 2013-03-12 11:19:35 作者: rapoo

我写的一个memcpy,大神看一下,指点一二!谢谢!
这是我写的memcpy:



源码为什么要那样处理呢?我写得有什么不妥吗?求高手点拨! c
[解决办法]
charbuffer[] = "hello,world\n";
memcpy(buffer + 1, buffer, 1);
printf("%s", buffer);

所以LZ以为这样的逻辑不对?
[解决办法]
效率问题,以16byte为例,
LZ循环中判断一次操作一次,
源码中判断一次操作8个,效率更高


[解决办法]
性能优化:

比如要考贝128个字节,在库源码中只需要128/8 = 16控制语句
i> 0; --i
而你的实现,虽然通用,却需要 128个语句
i < size;i ++)  
, 多了128-16= 112个语句,效率就不太高了。
[解决办法]
gcc的我不清楚,vc++的msdn写得很清楚: If the source and destination overlap, the behavior of memcpy is undefined. Use memmove to handle overlapping regions.

也就是说memcpy不考虑重叠的问题,由程序员自己来控制。这样做的优点自然还是高效。

读书人网 >C语言

热点推荐