1.スタック領域とヒープ領域
メモリ領域にはいくつかの種類があります。
その中で、スタック領域とヒープ領域について簡単に違いを理解しておきましょう。
過去問(H26秋AP問15)では、「プログラムの実行時に利用される記憶領域にスタック領域とヒープ領域がある」として、「サブルーチンからの戻り番地の退避にはスタック領域が使用され,割当てと解放の順序に関連がないデータの格納にはヒープ領域が使用される。」とあります。
以下は、H26秋SC午後1問1の過去問から引用しています。
こんな風にわかれているんだなぁと、雰囲気だけつかんでください。
なぜ、領域が分かれているのですか?
メモリを使用する変数において、サイズが明確なものと、そうでないものがあるからです。
①明確なもの
変数の値やアドレスなどのサイズがわかっている値を格納する際は、スタック領域を使います。
高速に処理できます。
②動的にメモリを確保するもの
たとえば、ファイルを読み込む際には、ファイルサイズがわからないので、ヒープ領域を使います。自由度が高いですが、ポインタなどでアドレスを参照する必要があり、同じ物理メモリでありながら、スタックよりも低速になります。
また、プログラムで不要な領域を解放することも可能なので、メモリ領域を効率よく使うことが可能。メモリサイズが小さいときは、スタック領域を大きくなりすぎないようにする工夫をしたりします。
⇒一方、メモリを解放しないと、使用効率が悪くなるので、ガーベジコレクションが必要です。
ヒープ領域に関しては、IPAの資料が参考になります。
2.メモリ領域の過去問を解いてみよう
(1)H26秋AP
問15 プログラムの実行時に利用される記憶領域にスタック領域とヒープ領域がある。それらの領域に関する記述のうち,適切なものはどれか。 ア サブルーチンからの戻り番地の退避にはスタック領域が使用され,割当てと解放の順序に関連がないデータの格納にはヒープ領域が使用される。 イ スタック領域には未使用領域が存在するが,ヒープ領域には未使用領域は存在しない。 ウ ヒープ領域はスタック領域の予備領域であり,スタック領域が一杯になった場合にヒープ領域が動的に使用される。 エ ヒープ領域も構造的にはスタックと同じプッシュとホップの操作によって,データの格納と取出しを行う。 |
↓
↓
↓
↓
↓
イ:ヒープ領域は未使用領域が存在します。
ウ:ヒープ領域とスタック領域は別々の用途で利用され、予備領域という概念はありません。
【正解】ア