最終更新:2026-10-12
memcpy と std::copy のパフォーマンス比較¶
最近パフォーマンス最適化を進めるなかで、std::copy を使うコードと memcpy を使うコードがありました。両者は機能的にほぼ同じですが、パフォーマンスへの影響はどう違うのでしょうか?
そこで本記事では、両者のいくつかの使用シーンを掘り下げます。
memcpy:理論上はわずかに優位¶
理論上は、memcpy には軽微なパフォーマンス上の優位性があります。その理由は std::copy とは異なる要件にあります。memcpy はデータコピー時に領域が重なる可能性を無視できますが、std::copy は様々なケースに対応する必要があります(底層では memmove)。ただし、このパフォーマンス差は実際のアプリケーションではまず体感できず、特に小規模なデータコピーでは顕著ではありません。
なお、memcpy は C スタイルの POD 構造体にしか使えないため、非 POD 型を扱う場合は選択肢になりません。
ここでは quick-bench で計測してみましたが、パフォーマンスに大きな差はないことがわかります。

どう選ぶか?¶
実際のプロジェクトで memcpy と std::copy のどちらを選ぶかは、要件次第です。POD 型を扱っていて柔軟性を保ちたいなら、std::copy を選ぶのがより賢明です。多くのシナリオでは、std::copy の方がより汎用的で安全なデータコピー方法を提供します。
一方、極限のパフォーマンスを追求する場合は、特に大規模データを扱う場面で memcpy を検討できます。ただし選択にあたっては、実際のユースケースに合わせて、プロファイリングツールを使って丁寧に計測・最適化してください。
まとめると、memcpy と std::copy にはそれぞれ長所と短所があり、プロジェクトの要件に応じてパフォーマンスと柔軟性のバランスを取る必要があります。実践では、より安全で汎用的な std::copy を選ぶのが信頼性の高い選択です。