Main Content

memset の最適化

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

memset 最適化を行って生成されたコードmemset 最適化を行わずに生成されたコード
 memset(&Y[0], 125, 100U * sizeof(signed char));
for (i = 0; i < 100; i++) {
    Y[i] = 125;
memset(&Z[0], 0, 1000U * sizeof(double));
Z[0] = 0.0;
Z[1] = 0.0;
Z[2] = 0.0;
...
Z[999] = 0.0;

コード ジェネレーターは、整数の定数または浮動小数点ゼロの代入に memset 最適化を使用できます。memset を使用するかどうかは、以下によって決まります。

  • 代入する値のサイズ。サイズは、C/C++ の memset 呼び出しの要件を満たしていなければなりません。

  • 代入するバイト数。代入するバイト数は、C/C++ データ型に必要なバイト数を配列要素数に乗算した値です。

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

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

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

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

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

浮動小数点ゼロの代入の場合、memset 最適化を有効または無効にするには、次を行います。

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

  • MATLAB Coder アプリで、[float と double を 0.0 に初期化するために memset を使用][はい] または [いいえ] に設定します。既定値は [はい] です。

関連するトピック