memmove和memcpy有什么区别?

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


使用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

上一篇: What is the difference between memmove and memcpy?

下一篇: JQuery for each anchor href replace thumbnail img src