メインコンテンツ

memcpy 最適化

連続する配列要素をコピーする生成されたコードを最適化するために、コード ジェネレーターはこのコードを memcpy 呼び出しに置き換えることを試みます。memcpy 呼び出しは、for ループまたは複数の連続する要素の代入よりもさらに効率的です。次の表は、memcpy 最適化を使用した場合と使用しない場合の生成された C コードの例を示しています。

memcpy 最適化を行って生成されたコードmemcpy 最適化を行わずに生成されたコード
 memcpy(&C[0], &A[0], 10000U * sizeof(double));
for (i0 = 0; i0 < 10000; i0++) {
    C[i0] = A[i0];
 memcpy(&Z[0], &X[0],1000U * sizeof(double));
Z[0] = X[0];
Z[1] = X[1];
Z[2] = X[2];
...
Z[999] = X[999];

既定では memcpy 最適化は有効になっています。この最適化を無効にするには、次のいずれかの方法を使用します。

memcpy 最適化が有効になっている場合、memcpy を使用するかどうかはコピーするバイト数によって決まります。コピーするバイト数が、配列要素数に C/C++ データ型に必要なバイト数を乗算した値である。

  • コピーする要素数がコンパイル時に既知の場合、コード ジェネレーターはバイト数が memcpy しきい値以上である場合にのみ memcpy 呼び出しを生成します。

  • 要素数がコンパイル時に不明な場合、コード ジェネレーターはしきい値に関係なく memcpy 呼び出しを生成します。

既定の memcpy しきい値は 64 バイトです。しきい値を変更するには、次のいずれかの方法を使用します。

  • コード構成オブジェクトで、MemcpyThreshold プロパティに異なるバイト数を指定する。

  • [コード生成設定] ダイアログ ボックスで、[memcpy しきい値 (バイト)] パラメーターに別の値を入力する。

memset 最適化は memcpy しきい値も使用します。

場合によっては、EnableMemcpy パラメーターや MemcpyThreshold パラメーター、またはアプリの同様の設定に関係なく、コード ジェネレーターは memcpy 呼び出しを作成できます。

参考

トピック