応用情報技術者 2019年 春期 午前2 問17
問題文
プログラムの実行時に利用される記憶領域にスタック領域とヒープ領域がある。それらの領域に関する記述のうち、適切なものはどれか。
選択肢
ア:サブルーチンからの戻り番地の退避にはスタック領域が使用され、割当てと解放の順序に関連がないデータの格納にはヒープ領域が使用される。(正解)
イ:スタック領域には未使用領域が存在するが、ヒープ領域には未使用領域は存在しない。
ウ:ヒープ領域はスタック領域の予備領域であり、スタック領域が一杯になった場合にヒープ領域が動的に使用される。
エ:ヒープ領域も構造的にはスタックと同じプッシュとポップの操作によって、データの格納と取出しを行う。
プログラムの実行時に利用される記憶領域に関する問題【午前2 解説】
要点まとめ
- 結論:サブルーチンの戻り番地はスタック領域に保存され、ヒープ領域は割当てと解放の順序に依存しないデータ格納に使われます。
- 根拠:スタックはLIFO構造で関数呼び出し管理に最適、ヒープは動的メモリ管理で自由な割当てが可能です。
- 差がつくポイント:スタックとヒープの役割や管理方法の違いを正確に理解し、誤った構造や用途を選ばないことが重要です。
正解の理由
選択肢アは、スタック領域がサブルーチンの戻り番地を保存するために使われること、ヒープ領域は割当てと解放の順序に依存しない動的メモリ管理に用いられることを正しく説明しています。スタックはLIFO(後入れ先出し)構造で関数呼び出しの管理に適しており、ヒープは自由な順序でメモリ割当てと解放が可能な領域です。
よくある誤解
ヒープ領域もスタックと同じようにプッシュ・ポップ操作で管理されると誤解されがちですが、ヒープは自由な順序で割当て・解放されるため管理方法が異なります。
解法ステップ
- スタック領域の役割を確認する(関数呼び出しの戻り番地や局所変数の管理)。
- ヒープ領域の特徴を理解する(動的メモリ割当て、割当てと解放の順序が自由)。
- 選択肢の記述がこれらの特徴に合致しているかを検証する。
- スタックとヒープの管理方法の違いを基に誤った選択肢を排除する。
- 正しい説明をしている選択肢を選ぶ。
選択肢別の誤答解説
- イ:ヒープ領域にも未使用領域は存在し、メモリの断片化などで未使用領域が生じるため誤りです。
- ウ:ヒープはスタックの予備領域ではなく、独立した動的メモリ領域であり、スタックが一杯になっても自動的にヒープが使われるわけではありません。
- エ:ヒープはプッシュ・ポップ操作で管理されず、自由な割当てと解放が可能なため、スタックと同じ管理方法ではありません。
補足コラム
スタック領域は高速で管理が容易なため、関数呼び出し時の戻り番地や局所変数の保存に適しています。一方、ヒープ領域はプログラム実行中に必要に応じてメモリを動的に確保・解放できるため、長期間保持するデータやサイズが不定のデータに利用されます。メモリリークや断片化の問題もヒープ管理で注意が必要です。
FAQ
Q: スタック領域のサイズは固定ですか?
A: 多くの場合、スタック領域はプログラム開始時に固定サイズで割り当てられますが、OSや環境によっては拡張可能な場合もあります。
A: 多くの場合、スタック領域はプログラム開始時に固定サイズで割り当てられますが、OSや環境によっては拡張可能な場合もあります。
Q: ヒープ領域のメモリ管理は誰が行いますか?
A: プログラマがmallocやnewなどの関数で割り当て、freeやdeleteで解放する必要があります。自動管理はガベージコレクションがある言語で行われます。
A: プログラマがmallocやnewなどの関数で割り当て、freeやdeleteで解放する必要があります。自動管理はガベージコレクションがある言語で行われます。
関連キーワード: スタック領域、ヒープ領域、動的メモリ管理、LIFO, メモリ割当て

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

