Main Content

スタック領域の割り当てのカスタマイズ

アプリケーションにはメモリの制限がある場合があります。スタックの最大許容サイズを制御することは、生成コードでデータをローカルに定義するか、グローバルに定義するかを変更するための 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で説明しています。

参考

関連するトピック