コールツリー(呼出し階層)解析による最大スタック消費量の算出

スタックフレームには、関数の戻り先アドレス、レジスタ退避領域、引数、およびローカル変数などが格納されます。プログラム全体の最大スタック消費量は、最悪ケースで関数が最も深く多重ネストして呼び出された呼出しチェーン(最大呼出しパス)に沿って、各関数のスタックフレームサイズを累積合算することで求まります。 したがって、各関数単体のスタックフレームサイズに加えて、どの関数がどの関数をどのような順序や深さで呼び出すかを表す 「各関数の呼出し関係(コールグラフ/呼出しツリー: Call Tree)」 の情報が不可欠です。したがって、正解は ウ です。 ア: レジスタ退避領域のサイズは各関数のスタックフレームサイズの中に既に含まれています。 イ: ローカル変数のサイズも各関数のスタックフレームサイズの中に既に含まれています。 エ: グローバル変数はデータセグメント(BSSセクションやDATAセクション)に配置されるため、スタックサイズには影響しません。

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

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