在源和目标重叠时使用 memcpy()
会导致未定义的行为 - 在这些情况下,只能使用 memmove()
。
但是如果我确定缓冲区不重叠怎么办 - 是否有理由专门使用 memcpy()
或专门使用 memmove()
?我应该使用哪个?为什么?
最佳答案
假设一个健全的库实现者,memcpy
将始终至少与 memmove
一样快。但是,在大多数平台上差异很小,并且在许多平台上,memcpy
只是 memmove
的别名,以支持(错误地)调用 memcpy< 的遗留代码
重叠缓冲区。
应该编写 memcpy
和 memmove
以利用平台上最快的加载和存储。
回答您的问题:您应该使用语义正确的那个。如果可以保证缓冲区不重叠,则应使用 memcpy
。如果不能保证缓冲区不重叠,则应使用 memmove
。
关于c++ - 使用哪一个 - memmove() 或 memcpy() - 当缓冲区不重叠时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1960991/