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
をtrue
またはfalse
に設定します。既定値はtrue
です。MATLAB® Coder™ アプリで、[ベクトルの割り当てに対して memcpy を使用] を
[はい]
または[いいえ]
に設定します。既定値は[はい]
です。
memcpy
最適化が有効になっている場合、memcpy
を使用するかどうかはコピーするバイト数によって決まります。コピーするバイト数が、配列要素数に C/C++ データ型に必要なバイト数を乗算した値である。
コピーする要素数がコンパイル時に既知の場合、コード ジェネレーターはバイト数が
memcpy
しきい値以上である場合にのみmemcpy
呼び出しを生成します。要素数がコンパイル時に不明な場合、コード ジェネレーターはしきい値に関係なく
memcpy
呼び出しを生成します。
既定の memcpy
しきい値は 64 バイトです。しきい値を変更するには、次の手順を実行します。
コマンド ラインで、コード構成オブジェクトのプロパティ
MemcpyThreshold
を設定します。MATLAB Coder アプリで [memcpy しきい値 (バイト)] を設定します。
memset
最適化は memcpy
しきい値も使用します。
場合によっては、EnableMemcpy
パラメーターや MemcpyThreshold
パラメーター、またはアプリの同様の設定に関係なく、コード ジェネレーターは memcpy
呼び出しを作成できます。