SkillStack
テクノロジ系21 / 25問

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

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

選択肢を押すと答え合わせができます。

正解と解説を見る

【正解】ウ

スタックフレームは、関数の呼出し中にスタック上へ確保される領域で、ローカル変数、引数、戻り先情報、退避レジスタなどを保持します。各関数のフレームサイズが分かっても、同時に積み重なる関数が分からなければ、最大使用量は求められません。そこで必要なのが関数の呼出し関係、すなわち呼出しツリーです。例えばmainがfを呼び、fがgを呼ぶ経路では、実行中にmain、f、gの各フレームが同時に残るため、その合計を求めます。全ての呼出し経路について合計し、最大値が確保サイズ以下かを確認するので、ウが正解です。

アのレジスタの退避領域のサイズは誤りです。これは通常、各関数が使用するスタックフレームのサイズを構成する内訳であり、与えられたフレームサイズとは別に必要な呼出し関係ではありません。 イのローカル変数のサイズも誤りです。これも各関数のスタックフレームに含まれる要素です。プログラム全体の最大使用量を決めるには、個別の内訳よりも、どのフレームが同時に存在するかが重要です。 エのグローバル変数の合計サイズは誤りです。グローバル変数は一般に静的記憶領域に配置され、関数呼出しごとにスタックへ積まれるものではありません。

【ポイント】 スタックの最大使用量は、「一つの呼出し経路上で同時に生存するフレームサイズの和」の最大値です。 再帰呼出しがある場合は、呼出し関係だけでなく、最大再帰回数などの上限も必要になる点を押さえてください。

出典:令和4年度 秋期 エンベデッドシステムスペシャリスト試験 午前II 問21
※ 解説は SkillStack 編集部が作成したものです。Web 表示のため、図表の配置や表記を一部改めています。

この回の25問を、アプリで通しで解く

  • 本番と同じ問題数・制限時間で通し演習(模試モード)
  • 間違えた問題は自動で「復習すべき問題」に回る
  • 解説で分からない点はAIに質問できる
SkillStackで無料で始める