小弟我写的一个memcpy,大神看一上,指点一二!多谢
我写的一个memcpy,大神看一下,指点一二!谢谢!这是我写的memcpy:源码为什么要那样处理呢?我写得有什么不妥
我写的一个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不考虑重叠的问题,由程序员自己来控制。这样做的优点自然还是高效。