平成26年度 秋期 午前 問15
ソフトウェア
スタックに関する問題
プログラムの実行時に利用される記憶領域にスタック領域とヒープ領域がある。それらの領域に関する記述のうち,適切なものはどれか。
- アサブルーチンからの戻り番地の退避にはスタック領域が使用され,割当てと解放の順序に関連がないデータの格納にはヒープ領域が使用される。
- イスタック領域には未使用領域が存在するが,ヒープ領域には未使用領域は存在しない。
- ウヒープ領域はスタック領域の予備領域であり,スタック領域が一杯になった場合にヒープ領域が動的に使用される。
- エヒープ領域も構造的にはスタックと同じプッシュとポップの操作によって,データの格納と取出しを行う。
答えと解説を見る
✓ これが正解アサブルーチンからの戻り番地の退避にはスタック領域が使用され,割当てと解放の順序に関連がないデータの格納にはヒープ領域が使用される。
解説
解放の順が決まっているかが割れ目です。
二つの領域の違いは、解放する順番があらかじめ決まっているかどうかの一点に還元できます。スタック領域は、手続を呼び出すたびに戻り番地や引数や局所変数を積み上げ、その手続が終わったら必ず積んだのと逆の順に降ろします。入れ子の内側から順に片づくことが約束されているので、積む操作と降ろす操作だけあれば管理は足ります。いっぽうヒープ領域は、プログラムが必要と判断した時点で確保し、不要と判断した時点で解放します。確保した順序と解放する順序のあいだに決まりがないので、どこが空いているかを覚えておく表が別に必要ですし、使われている領域のあいだにとびとびの空きも生じます。この違いを設問の語に当てはめます。手続からの戻り番地を退避するのは呼出しの入れ子そのものですから前者に、割当てと解放の順序に関連がないデータは後者に置かれます。この組合せを述べたものが正しい記述です。
ほかの選択肢はなぜ違うのか
- イスタック領域には未使用領域が存在するが,…:片方にだけ未使用の部分が存在しないと言い切っています。実際にはどちらにも使っていない部分は残りますし、順序の決まりがない側ではむしろ、使用中の領域にはさまれた細かい空きが生じるのが普通です。
- ウヒープ領域はスタック領域の予備領域であり…:一方をもう一方の予備として扱う説明ですが、二つは用途そのものが別です。積み上げる側が尽きたときは、その旨の異常として扱われるのであって、もう一方が自動で肩代わりする仕組みがあるわけではありません。
- エヒープ領域も構造的にはスタックと同じプッ…:積む操作と降ろす操作だけで足りるのなら、そもそも二つ目の領域を分けて用意する理由がありません。好きな順に確保も解放もできることが存在理由なので、この説明では両者の区別が消えてしまいます。
出典:平成26年度 秋期 応用情報技術者試験 午前 問15
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)