memmove 和 bcopy 有什么区别?
What's the difference between memmove and bcopy?
我理解 memcpy
和 memmove
之间的区别:memmove
处理 src
和 dst
的重叠。我检查了 man page for bcopy
,它似乎也处理重叠。所以我想知道 memmove
和 bcopy
之间是否有任何区别?
它们在功能上是等价的。区别在于便携性。 memmove
是 C 标准的一部分,而 bcopy
是 POSIX 的一部分,因此可移植性较差。
bcopy
已弃用。手册页说:
This function is deprecated (marked as LEGACY in POSIX.1-2001): use memcpy(3)
or memmove(3)
in new programs. Note that the first two arguments are interchanged for memcpy(3)
and memmove(3)
. POSIX.1-2008 removes the specification of bcopy()
.
bcopy
和 memmove
做同样的事情。然而,他们以不同的顺序接受参数:bcopy(src, dest, n)
vs memmove(dest, src, n)
。所以他们不能是同一个函数的两个名字。
从历史上看,bcopy
是两者中较旧的一个;如果没记错的话,它出现在 3BSD 中。 memmove
是C委员会在1988年左右发明的
新代码应使用 memmove
,因为它是 C 标准所要求的,因此比 bcopy
更便携。
主要区别通常来自它们的来源。 bcopy
来自 Berkeley Source Distribution (BSD) 系统,而 memcpy
及其家族主要来自 AT&T 的 System V。最后,通过遵守遗留代码,所有这些功能都包含在标准中。
Richard Steven 的书 "UNIX network programming" 中对 memset
与 bzero
的用法有很好的解释,其中对其中任何一个的用法都有一定的解释。
今天的实现只是解决调用相同的内部实现但提供两个接口。
我理解 memcpy
和 memmove
之间的区别:memmove
处理 src
和 dst
的重叠。我检查了 man page for bcopy
,它似乎也处理重叠。所以我想知道 memmove
和 bcopy
之间是否有任何区别?
它们在功能上是等价的。区别在于便携性。 memmove
是 C 标准的一部分,而 bcopy
是 POSIX 的一部分,因此可移植性较差。
bcopy
已弃用。手册页说:
This function is deprecated (marked as LEGACY in POSIX.1-2001): use
memcpy(3)
ormemmove(3)
in new programs. Note that the first two arguments are interchanged formemcpy(3)
andmemmove(3)
. POSIX.1-2008 removes the specification ofbcopy()
.
bcopy
和 memmove
做同样的事情。然而,他们以不同的顺序接受参数:bcopy(src, dest, n)
vs memmove(dest, src, n)
。所以他们不能是同一个函数的两个名字。
从历史上看,bcopy
是两者中较旧的一个;如果没记错的话,它出现在 3BSD 中。 memmove
是C委员会在1988年左右发明的
新代码应使用 memmove
,因为它是 C 标准所要求的,因此比 bcopy
更便携。
主要区别通常来自它们的来源。 bcopy
来自 Berkeley Source Distribution (BSD) 系统,而 memcpy
及其家族主要来自 AT&T 的 System V。最后,通过遵守遗留代码,所有这些功能都包含在标准中。
Richard Steven 的书 "UNIX network programming" 中对 memset
与 bzero
的用法有很好的解释,其中对其中任何一个的用法都有一定的解释。
今天的实现只是解决调用相同的内部实现但提供两个接口。