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
最適化を有効または無効にするには、次を行います。
コマンド ラインで、コード構成オブジェクトのプロパティ
InitFltsAndDblsToZero
をtrue
またはfalse
に設定します。既定値はtrue
です。MATLAB Coder アプリで、[float と double を 0.0 に初期化するために memset を使用] を
[はい]
または[いいえ]
に設定します。既定値は[はい]
です。