Main Content

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 最適化を有効または無効にするには、次の手順を実行します。

  • コマンド ラインで、コード構成オブジェクトのプロパティ EnableMemcpytrue または false に設定します。既定値は true です。

  • MATLAB® Coder™ アプリで、[ベクトルの代入に対する memcpy の使用][はい] または [いいえ] に設定します。既定値は [はい] です。

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

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

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

既定の memcpy しきい値は 64 バイトです。しきい値を変更するには、次の手順を実行します。

  • コマンド ラインで、コード構成オブジェクトのプロパティ MemcpyThreshold を設定します。

  • MATLAB Coder アプリで [memcpy しきい値 (バイト)] を設定します。

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

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

関連するトピック