最小スタック使用量
入れ子にされたスコープを考慮した関数内のローカル変数の合計サイズに呼び出し先の最大スタック使用量を加えたもの
説明
このメトリクスは Code Prover 解析のみで報告されます。
このメトリクスでは、関数によるスタック使用量の楽観的な推定値が提供されます。メトリクス最大スタック使用量とは異なり、このメトリクスでは入れ子にされたスコープを考慮します。たとえば、変数が条件付きステートメントの相互に排他的な 2 つの分岐で定義されている場合、メトリクスでは、一方の分岐の変数に割り当てられたスタック領域はもう一方の分岐で再利用できると見なします。
メトリクスは、以下のサイズのバイト単位の合計です。
関数呼び出し先のスタック使用量の最大値。計算では、各呼び出し先の最小スタック使用量を使用します。
たとえば、この例では、
funcの最小スタック使用量はfunc1またはfunc2の最小スタック使用量のうちの "小さい方" と同じです。void func(void) { func1(); func2(); }関数呼び出しが条件付きステートメントの複数の分岐にある場合、このメトリクスではスタック使用量の最も小さい分岐が考慮されます。
解析では、どの関数呼び出しが実際に発生するかを解決したら、後からスタック サイズの推定を行います。たとえば、関数呼び出しが到達不能コードで発生する場合、スタック サイズにはその呼び出しは考慮されません。解析では、関数ポインターによる呼び出しを考慮することもできます。
実際のスタック使用量は、このメトリクス値と異なる可能性があります。
一部の変数はスタックではなくレジスタに保存されます。
コンパイラでは、メモリの一定の最適化を有効にするために、変数存続の解析が実行されます。このメトリクスを推定する際、Polyspace® ではこれらの最適化が考慮されません。
コンパイラでは、関数呼び出し中に追加メモリが使用されます。たとえば、コンパイラは実行で次の関数呼び出しが返る先のアドレスを保存します。このメトリクスを推定する際、Polyspace ではこの隠れたメモリの使用は考慮されません。
コンパイラはいくつかの方法で一時変数を最適化します。このメトリクスでは、一時変数が除外されます。ユーザーによって明示的に宣言されている変数のみが考慮されます。
ただし、このメトリクスではスタック使用量の妥当な推定値が提供されます。
基本型のサイズを判断するため、本ソフトウェアではターゲット プロセッサ タイプ (-target)の仕様が使用されます。メトリクスでは、コード内の #pragma pack 命令が考慮されます。
例
メトリクス情報
| グループ: 関数 |
頭字語: MIN_STACK |
| HIS メトリクス:いいえ |