私はそれを理解してmemmove
おり、memcpy
違いはmemmove
メモリオーバーラップケースを処理することです。libgcc での実装を確認し、インテルの Web サイトからこの記事[memcpy performance]を入手しました。
libgcc では、memmove
は に似ていますがmemcpy
、どちらも 1 バイトと 1 バイトを使用するだけなので、最適化後でもパフォーマンスはほぼ同じになるはずです。
誰かがこれを測定し、この記事memcopy, memmove, and Speed over Safetyを得ました。memmove
が より速いとは思いませんが、少なくともプラットフォームmemcpy
上では大きな違いはないはずです。Intel
したがって、どのプラットフォームで、どのようにmemcpy
が よりも大幅に高速になる可能性がありますmemmove
。存在しない場合は、なぜ だけmemmove
ではなく 2 つの同様の機能を提供し、多くのバグにつながります。
編集: memmove と memcpy の違いを尋ねているわけではありません。memmove がオーバーラップの問題を処理できることはわかっています。問題は、memcpy が memmove よりも高速なプラットフォームが実際にあるということです。