組込みシステムにおける最大スタック消費量解析と関数呼出しツリー

C言語プログラムでは、関数が呼び出されるごとに関数の戻りアドレス、退避レジスタ、ローカル変数などを格納する スタックフレーム がスタック領域に順次積み上げられます。システム全体の最大スタック消費量を静的に算出してスタックオーバーフローを防止するためには、個々の関数単体が消費するスタックフレームサイズに加えて、 プログラムの実行開始から最も深く関数が多重呼出しされる経路を示す「各関数の呼出し関係(コールツリー/呼出し階層構造)」 が必須情報となります。コールグラフに沿ってルートから末端までの累積スタックサイズを辿ることで、最悪実行経路における最大所要スタック容量を導出できます。したがって、正解は ウ です。 ア: 各関数が退避するレジスタ領域のサイズは、すでに「各関数のスタックフレームサイズ」の一部として含まれています。 イ: 各関数のローカル変数のサイズも、すでに「各関数のスタックフレームサイズ」の一部として含まれています。 エ: グローバル変数はスタック領域ではなくデータセクション(BSSセクションやDATAセクション)に配置されるため、スタックフレームの検証には不要です。

C言語で作成されたプログラム全体で使用するスタックフレームのサイズが,確保したサイズ内に収まっていることを検証したい。各関数が使用するスタックフレームのサイズ情報に加え,必要となる情報はどれか。

出典平成31年度 春期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問21
ア
各関数が使用するレジスタの退避領域のサイズ
イ
各関数が使用するローカル変数のサイズ
ウ
各関数の呼出し関係(呼出しツリー)
エ
グローバル変数の合計サイズ