IPA過去問ドリル

平成31年度 春期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問21

テクノロジ/開発技術

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

出典:平成31年度 春期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問21

正解:ウ

解説

プログラム全体で実際に使用されるスタックフレームの最大サイズは,ある時点で同時に積み重なる(ネストする)関数呼出しの深さに依存します。各関数単体が使用するスタックフレームのサイズが分かっていても,どの関数がどの関数を呼び出すか(呼出し関係,呼出しツリー)が分からなければ,最も深くネストしたときに必要となるスタックフレームの合計サイズ(最悪ケースのスタック使用量)を求めることができません。

選択肢ごとの解説

  • 誤り。各関数が使用するレジスタの退避領域のサイズは,通常その関数自身のスタックフレームのサイズに既に含まれている情報であり,スタック使用量全体の検証に別途必要となる追加情報ではありません。
  • 誤り。各関数が使用するローカル変数のサイズも,通常その関数自身のスタックフレームのサイズに既に含まれている情報であり,別途必要となる追加情報ではありません。
  • 正しい。プログラム全体での最大スタック使用量は,関数呼出しがどれだけ深くネストするかによって決まるため,各関数のスタックフレームサイズに加えて,関数の呼出し関係(呼出しツリー)の情報が必要です。
  • 誤り。グローバル変数は静的に確保される領域であり,スタックフレーム(関数呼出しのたびに動的に確保される領域)には含まれないため,スタックフレームの合計サイズの検証には直接関係しません。
エンベデッドシステムスペシャリストの過去問を演習モードで解く