IPA過去問ドリル

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

テクノロジ/開発技術

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

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

正解:ウ

解説

プログラム全体で使用するスタックフレームの最大サイズを検証するには,各関数が単独で使用するスタックフレームのサイズだけでなく,どの関数がどの関数を呼び出すかという呼出し関係(呼出しツリー)の情報が必要です。ある時点で実行中の関数の呼出し経路(コールスタック)上にある全ての関数が使用するスタックフレームのサイズの合計が,実際にスタック上に積まれる最大サイズとなるため,呼出しツリーをたどって最も深い(あるいは合計サイズが最大となる)経路を求めることによって,プログラム全体で必要となる最大のスタックサイズを検証できます。

選択肢ごとの解説

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