スタック領域の割り当てのカスタマイズ
アプリケーションにはメモリの制限がある場合があります。スタックの最大許容サイズを制御することは、生成コードでデータをローカルに定義するか、グローバルに定義するかを変更するための 1 つの方法です。[コンフィギュレーション パラメーター] ダイアログ ボックスの [最適化] ペインで 最大スタック サイズ (バイト) パラメーターに正の整数値を指定することにより、スタック領域の使用を制限できます。最大許容スタック サイズを指定すると、生成コードのローカル変数およびグローバル変数の数を制御できます。特に、最大スタック サイズを小さくすると、より多くの変数をグローバル構造体に生成できることがあります。ローカル変数およびグローバル変数の数は、生成コードの実行に必要なスタック領域の容量を決定する要因となります。Embedded Coder® のライセンスをお持ちの場合は、Static Code Metrics (Embedded Coder)を使用してコード内のグローバル変数の数とサイズを追跡できます。
モデルに 4096 バイトを超える変数が含まれる場合、コード ジェネレーターではその変数は既定でグローバル メモリに実装されます。TLC 変数 MaxStackVariableSize
の値を変更して、コード ジェネレーターでローカル メモリに配置される変数のサイズを大きくすることができます。この値を変更するには MATLAB® コマンド ウィンドウで次のコマンドを入力します。
set_param(modelName,'TLCOptions','-aMaxStackVariableSize=N')
最大スタック サイズ (バイト)の既定の設定は [ターゲットから継承]
です。この場合、最大スタック サイズの値は、コード ジェネレーターによって設定される既定値 (200,000 バイト) またはシステム ターゲット ファイル (ert.tlc
) の TLC 変数 MaxStackSize
の値の小さいほうの値です。
さらに小さいスタック サイズをアプリケーションに対して指定するには、[最大スタック サイズ (バイト)] パラメーターの [Specify a value]
オプションを選択し、正の整数値を入力します。さらに小さいスタック サイズをコマンド ラインで指定するには、次のようにします。
set_param(model_name, 'MaxStackSize', 65000);
メモ
実行可能プログラム全体のスタック使用量メトリクスの場合は、オブジェクト コードによるランタイム (経験的) 解析または静的 (コード パス) 解析を使用して、ターゲット固有の測定を行うことがあります。
スタック領域の割り当てを制御するには、システム ターゲット ファイルで TLC 変数 MaxStackSize
を変更するのではなく、[最大スタック サイズ (バイト)] パラメーターを使用することをお勧めします。ただし、ターゲットの作成者が、TLC 変数 MaxStackSize
をターゲットに対して設定する場合があります。MaxStackSize
を設定するには、次の例のように、システム ターゲット ファイル (ert.tlc
) の assign
ステートメントを使用します。
%assign MaxStackSize = 4096
%assign
ステートメントを、システム ターゲット ファイルの Configure RTW code generation settings
セクションに記述します。%assign
ステートメントはTarget Language Compilerで説明しています。