6

私はそれを理解して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 よりも高速なプラットフォームが実際にあるということです。

4

2 に答える 2

-2

グッド プラクティス: 通常、memmove は必要な場合にのみ使用してください。ソース リージョンと宛先リージョンがオーバーラップしている可能性が非常に高い場合に使用します。

それ以外の場合は、memcpy を使用します。memcpy の方が効率的です。

参照: https://www.youtube.com/watch?v=Yr1YnOVG-4g Jerry Cain 博士、(Stanford Intro Systems Lecture - 7) 時間: 36:00

于 2016-12-10T02:38:08.577 に答える