memmove和memcpy有什么区别?
memmove
和memcpy
什么区别? 你通常使用哪一个以及如何?
使用memcpy
,目标无法与源重叠。 随着memmove
它可以。 这意味着memmove
可能会比memcpy
慢一点,因为它不能做出相同的假设。
例如, memcpy
可能总是将地址从低到高复制。 如果目标在源之后重叠,这意味着某些地址在复制之前将被覆盖。 memmove
会检测到这一点,并在另一个方向上复制 - 从高到低 - 在这种情况下。 但是,检查这个并切换到另一个(可能效率较低)算法需要时间。
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
从memcpy手册页。
memcpy()函数从存储区src复制n个字节到存储区dest。 内存区域不应该重叠。 如果内存区域重叠,请使用memmove(3)。
链接地址: http://www.djcxy.com/p/89575.html