平成31年度 春期 午前 問17
ソフトウェア
スタック領域に関する問題
プログラムの実行時に利用される記憶領域にスタック領域とヒープ領域がある。それらの領域に関する記述のうち,適切なものはどれか。
- アサブルーチンからの戻り番地の退避にはスタック領域が使用され,割当てと解放の順序に関連がないデータの格納にはヒープ領域が使用される。
- イスタック領域には未使用領域が存在するが,ヒープ領域には未使用領域は存在しない。
- ウヒープ領域はスタック領域の予備領域であり,スタック領域が一杯になった場合にヒープ領域が動的に使用される。
- エヒープ領域も構造的にはスタックと同じプッシュとポップの操作によって,データの格納と取出しを行う。
答えと解説を見る
✓ これが正解アサブルーチンからの戻り番地の退避にはスタック領域が使用され,割当てと解放の順序に関連がないデータの格納にはヒープ領域が使用される。
解説
戻り番地はスタック、順不同のデータはヒープに置きます。
スタック領域は後入れ先出しの規律で使う場所で、サブルーチンの呼び出しに伴う戻り番地や、その関数の中だけで使うローカルな値を積み上げるのに向いています。関数から戻るときには積んだ順の逆で取り出せるので、記憶の管理を簡単に保てます。一方のヒープ領域は、確保と解放の順序に決まりがなく、必要になった時点で任意の大きさを取り、不要になった時点で任意の順で返す使い方に応えられる場所です。プログラムから明示的に確保する動的なデータや、寿命の長い可変長のデータを置く役目を担います。設問の一文は、この二つの領域の役割の違いをそのまま述べたものです。
ほかの選択肢はなぜ違うのか
- イスタック領域には未使用領域が存在するが,…:スタックには未使用領域があってヒープには無い、とする組み合わせは事実と合いません。ヒープでも要求と解放の繰り返しで隙間が残り、断片化として扱われる未使用領域が発生します。
- ウヒープ領域はスタック領域の予備領域であり…:ヒープをスタックの予備と説明するのは役割の取り違えです。二つは目的も規律も別に設けられており、片方の一杯を待って自動的に切り替わる仕組みは持っていません。
- エヒープ領域も構造的にはスタックと同じプッ…:ヒープもプッシュとポップで格納する、とする説明は使い方を狭めすぎています。ヒープは順序に縛られない確保と解放を許すためにあり、後入れ先出しに限定された操作では働きが失われます。
出典:平成31年度 春期 応用情報技術者試験 午前 問17
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)