平成31年度春期 エンベデッドシステムスペシャリスト試験 午前II 問21
【問題21】
C言語で作成されたプログラム全体で使用するスタックフレームのサイズが,確保したサイズ内に収まっていることを検証したい。各関数が使用するスタックフレームのサイズ情報に加え,必要となる情報はどれか。
【解説】
ア: 各関数が使用するレジスタの退避領域のサイズ
誤り。レジスタの退避領域もスタックに含まれますが,これだけではスタックサイズ全体の検証には不十分です。
イ: 各関数が使用するローカル変数のサイズ
誤り。ローカル変数のサイズもスタックフレームに影響しますが,これも全体の検証に必要な唯一の情報ではありません。
ウ: 各関数の呼出し関係(呼出しツリー)
正しい。スタックサイズの検証には,関数呼び出しの深さや並び順を考慮する必要があります。呼出しツリーを用いることで,プログラム全体でのスタック使用量を正確に把握できます。
エ: グローバル変数の合計サイズ
誤り。グローバル変数は静的領域に確保されるため,スタックサイズの検証には関係ありません。
【答え】
ウ: 各関数の呼出し関係(呼出しツリー)
出典:平成31年度 春期 エンベデッドシステムスペシャリスト試験 午前II 問21