memmove
和memcpy
有什么区别?你通常使用哪一个以及如何使用?
发布于 2009-07-29 16:03:17
使用memcpy
,目标完全不能与源重叠。有了memmove
它就可以了。这意味着memmove
可能比memcpy
稍微慢一些,因为它不能做出相同的假设。
例如,memcpy
可能始终将地址从低复制到高。如果目标在源之后重叠,这意味着一些地址将在复制之前被覆盖。在这种情况下,memmove
会检测到这一点,并向另一个方向复制-从高到低。然而,检查这一点并切换到另一种(可能效率较低的)算法需要时间。
发布于 2009-07-29 16:03:53
memmove
可以处理重叠内存,而memcpy
不能。
考虑一下
char[] str = "foo-bar";
memcpy(&str[3],&str[4],4); //might blow up
很明显,源和目标现在重叠了,我们用"-bar“覆盖了"bar”。如果源和目标重叠,则使用memcpy
是未定义的行为,因此在这种情况下,我们需要memmove
。
memmove(&str[3],&str[4],4); //fine
发布于 2009-07-29 16:02:37
一个(memmove
)处理重叠的目的地,另一个(memcpy
)不处理。
https://stackoverflow.com/questions/1201319
复制相似问题