我知道 memmove
和 memcpy
的区别在于 memmove
处理内存重叠情况。我检查了 libgcc 中的实现并得到了这篇文章 [memcpy performance]来自英特尔网站。
在 libgcc 中,memmove
类似于 memcpy
,都是一个字节一个字节地走,所以即使经过优化,性能应该也差不多。
有人测过这个得到这篇文章memcopy, memmove, and Speed over Safety .即使我不认为 memmove
可以比 memcpy
更快,但至少在 Intel
平台上应该没有太大区别。
那么在什么平台上以及如何,memcpy
可以比 memmove
快得多,如果没有,为什么要提供两个类似的函数而不是仅仅 memmove
,并导致大量错误。
编辑:我不是在问 memmove 和 memcpy 的区别,我知道 memmove 可以处理重叠问题。问题是真的有任何平台可以让 memcpy 比 memmove 更快吗?
最佳答案
最近至少有一个案例,非重叠内存的约束被用来生成更快的代码:
在 Visual Studio 中 memcpy
可以使用 intrinsics 编译,而 memmove
不能。这导致 memcpy
对于已知大小的小区域更快,因为消除了函数调用和设置开销。使用 movsd
/movsw
/movsb
的实现不适合重叠 block ,因为它从最低地址开始复制,递增 edi/esi在复制过程中。
另见 Make compiler copy characters using movsd .
GCC also lists memcpy 作为内置函数实现,其实现和动机可能与 Visual Studio 类似。
关于c++ - 在什么平台上 memmove 和 memcpy 会有显着的性能差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19585930/