このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
ローカル変数サイズのより低い推定値
入れ子にされたスコープを考慮した関数内のローカル変数の合計サイズ
説明
このメトリクスでは、関数内のローカル変数の合計サイズの楽観的な推定値が提供されます。メトリクスは、以下のサイズのバイト単位の合計です。
関数の戻り値のサイズ
関数パラメーターのサイズ
ローカル変数のサイズ
次のように、入れ子にされたスコープ内の変数定義が関数に含まれているものとします。
ソフトウェアは、各スコープ内の合計変数サイズを計算し、その中で最大のものを使用します。たとえば条件ステートメントに変数定義が含まれている場合、ソフトウェアは各分岐内の合計変数サイズを計算してから、その中で最大のものを使用します。入れ子にされたスコープ自体にさらに入れ子にされたスコープが含まれている場合は、内側のスコープに対して同じプロセスが繰り返されます。type func (type param_1, ...) { { /* Scope 1 */ type var_1, ...; } { /* Scope 2 */ type var_2, ...; } }
入れ子にされたスコープ内で定義された変数は、そのスコープ外では表示されません。そのため、一部のコンパイラは、別のスコープ内で定義された変数のスタック領域を再利用します。このメトリクスでは、このようなコンパイラのスタック使用量のより正確な推定値が提供されます。それ以外の場合は、メトリクス
ローカル変数サイズのより高い推定値
を使用してください。このメトリクスでは、入れ子にされたスコープ内で定義されているかどうかに関係なく、すべてのローカル変数のサイズを合計します。メモリ アライメントのために導入される追加パティング
ローカル変数による実際のスタック使用量は、このメトリクス値と異なる可能性があります。
一部の変数はスタックではなくレジスタに保存されます。
コンパイラでは、メモリの一定の最適化を有効にするために、変数存続の解析が実行されます。このメトリクスを計算する際、Polyspace® ではこれらの最適化が考慮されません。
コンパイラでは、関数呼び出し中に追加メモリが使用されます。たとえば、コンパイラは実行で次の関数呼び出しが返る先のアドレスを保存します。このメトリクスを計算する際、Polyspace ではこの隠れたメモリの用途は考慮されません。
コンパイラはいくつかの方法で一時変数を最適化します。このメトリクスでは、一時変数が除外されます。ユーザーによって明示的に宣言されている変数のみが考慮されます。
ただし、このメトリクスではローカル変数によるスタック使用量の妥当な推定値が提供されます。
関数が、コピー コンストラクターを含む class
、struct
、または union
を返す場合は、コンパイラが戻り値の最適化を実行する可能性があります。クラス オブジェクトを返す代わりに、関数は、ポインターを使用して値を渡す可能性があります。この最適化によって、このメトリクスの値が変更されることがあります。
基本型のサイズを判断するため、本ソフトウェアではターゲット プロセッサ タイプ (-target)
の仕様が使用されます。メトリクスでは、コード内の #pragma pack
指令も考慮されます。
例
メトリクス情報
グループ: 関数 |
頭字語: LOCAL_VARS_MIN |
HIS メトリクス:いいえ |