C言語で作成されたプログラム全体で使用するスタックフレームのサイズが、確保したサイズ内に収まっていることを検証したい。 各関数が使用するスタックフレームのサイズ情報に加え、必要となる情報はどれか。
ア | 各関数が使用するレジスタの退避領域のサイズ |
イ | 各関数が使用するローカル変数のサイズ |
ウ | 各関数の呼出し関係(呼出しツリー) |
エ | グローバル変数の合計サイズ |
答え ウ
【解説】
プログラムがスタックを使用するのは関数呼び出し時のデータの退避と関数で使用するローカル変数で、各関数が使用するスタックフレームのサイズ情報が各関数のローカル変数のサイズのことなので、プログラム全体で使用するスタックフレームのサイズを計算するには、各関数が使用するスタックフレームのサイズ情報と、各関数の呼出し関係(ウ)が必要になります。
関数の入れ子関係が深くなるとスタックフレームのサイズは大きくなります。(再帰プログラムは関数の入れ子関係を見積もることができないため、スタックを使い切ってあふれるスタックオーバフローが発生する危険があります。)
【キーワード】
・スタックフレーム