1. ホーム
  2. c++

[解決済み] なぜmemcpy()とmemmove()はポインタのインクリメントより高速なのですか?

2023-02-23 02:17:33

疑問点

からNバイトをコピーしています。 pSrc から pDest . これは1つのループで行うことができます。

for (int i = 0; i < N; i++)
    *pDest++ = *pSrc++

なぜこれが memcpymemmove ? どのようなトリックでスピードアップしているのでしょうか?

どのように解決するのですか?

memcpy はバイトポインタではなくワードポインタを使用するため、memcpy の実装はしばしば SIMD 命令で書かれていることが多く、これにより一度に 128 ビットをシャッフルすることができます。

SIMD命令とは、最大16バイト長のベクトルの各要素に対して同じ処理を実行できるアセンブリ命令のことです。ロード命令やストア命令も含まれる。