首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >memmove和memcpy有什么区别?

memmove和memcpy有什么区别?
EN

Stack Overflow用户
提问于 2009-07-29 16:01:43
回答 4查看 95.4K关注 0票数 132

memmovememcpy有什么区别?你通常使用哪一个以及如何使用?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-07-29 16:03:17

使用memcpy,目标完全不能与源重叠。有了memmove它就可以了。这意味着memmove可能比memcpy稍微慢一些,因为它不能做出相同的假设。

例如,memcpy可能始终将地址从低复制到高。如果目标在源之后重叠,这意味着一些地址将在复制之前被覆盖。在这种情况下,memmove会检测到这一点,并向另一个方向复制-从高到低。然而,检查这一点并切换到另一种(可能效率较低的)算法需要时间。

票数 171
EN

Stack Overflow用户

发布于 2009-07-29 16:03:53

memmove可以处理重叠内存,而memcpy不能。

考虑一下

代码语言:javascript
复制
char[] str = "foo-bar";
memcpy(&str[3],&str[4],4); //might blow up

很明显,源和目标现在重叠了,我们用"-bar“覆盖了"bar”。如果源和目标重叠,则使用memcpy是未定义的行为,因此在这种情况下,我们需要memmove

代码语言:javascript
复制
memmove(&str[3],&str[4],4); //fine
票数 34
EN

Stack Overflow用户

发布于 2009-07-29 16:02:37

一个(memmove)处理重叠的目的地,另一个(memcpy)不处理。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1201319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档