需求
正常我们直接复制内存使用的是 mcmcpy
, 今天看到 memmove
感到比较奇怪,他们的区别是什么?
解决
相同点
memcpy
和 memmove
都是内存复制。当目的内存和源内存没有交集的情况下,随便使用哪个都可以。
不同点
当目的内存和源内存有交集的时候,因为 memcpy
是从前向后复制的,所以会造成部分内容出错。而 memmove
会先判断,如果有交集,那么就从后向前复制。
注意
现在有些系统,在实现的时候, memcpy
和 memmove
是等价的,所以可以直接用 memmove
. 当效率要求不高的时候,可以统一使用 memmove
, 当效率要求比较高的时候,在程序中无交集情况下,使用 memcpy
, 有交集情况下使用 memmove
.