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
最適化は有効になっています。この最適化を無効にするには、次のいずれかの方法を使用します。
コード構成オブジェクトで、
EnableMemcpy
プロパティをfalse
に設定する。[コード生成設定] ダイアログ ボックスで、[ベクトルの代入に対する memcpy の使用] チェック ボックスをオフにする。
memcpy
最適化が有効になっている場合、memcpy
を使用するかどうかはコピーするバイト数によって決まります。コピーするバイト数が、配列要素数に C/C++ データ型に必要なバイト数を乗算した値である。
コピーする要素数がコンパイル時に既知の場合、コード ジェネレーターはバイト数が
memcpy
しきい値以上である場合にのみmemcpy
呼び出しを生成します。要素数がコンパイル時に不明な場合、コード ジェネレーターはしきい値に関係なく
memcpy
呼び出しを生成します。
既定の memcpy
しきい値は 64 バイトです。しきい値を変更するには、次のいずれかの方法を使用します。
コード構成オブジェクトで、
MemcpyThreshold
プロパティに異なるバイト数を指定する。[コード生成設定] ダイアログ ボックスで、[memcpy しきい値 (バイト)] パラメーターに別の値を入力する。
memset
最適化は memcpy
しきい値も使用します。
場合によっては、EnableMemcpy
パラメーターや MemcpyThreshold
パラメーター、またはアプリの同様の設定に関係なく、コード ジェネレーターは memcpy
呼び出しを作成できます。