IPA過去問ドリル

令和4年度 秋期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問21

テクノロジ/開発技術

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

出典:令和4年度 秋期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問21

正解:ウ

解説

プログラム全体でのスタックフレームの最大使用量は,各関数が単独で使用するスタックフレームのサイズだけでなく,どの関数がどの関数を呼び出すかという呼出し関係(呼出しツリー)が分からなければ求められません。呼出しツリーの中で,根から葉までの経路上にある関数のスタックフレームサイズを合計した値のうち,最大となる経路(最悪の呼出し経路)を特定することで,プログラム全体での最大スタック使用量を求めることができます。

選択肢ごとの解説

  • 誤り。レジスタの退避領域のサイズは,各関数のスタックフレームサイズに既に含まれている情報であり,別途必要となる追加情報ではありません。
  • 誤り。ローカル変数のサイズも,各関数のスタックフレームサイズに含まれる情報であり,スタックフレームサイズ情報として既に与えられています。
  • 正しい。各関数のスタックフレームサイズに加えて,どの関数がどの関数を呼び出すかという呼出し関係(呼出しツリー)が分かれば,最悪の呼出し経路をたどることで,プログラム全体での最大スタック使用量を求めることができます。
  • 誤り。グローバル変数はスタック領域ではなく静的な記憶領域に配置されるため,スタックフレームのサイズの検証には直接関係しません。
エンベデッドシステムスペシャリストの過去問を演習モードで解く