応用情報技術者試験 - SE娘の剣 -

応用情報処理技術者試験の対策サイトです。 応用情報処理技術者試験の午前問題を中心とした基礎用語の解説を中心に掲載します。書き始めたばかりなので、内容はまだまだ不十分です。少しずつ追記していきます

メモリ領域(スタック領域とヒープ領域)

 

1.スタック領域とヒープ領域

メモリ領域にはいくつかの種類があります。
その中で、スタック領域とヒープ領域について簡単に違いを理解しておきましょう。
過去問(H26秋AP問15)では、「プログラムの実行時に利用される記憶領域にスタック領域とヒープ領域がある」として、「サブルーチンからの戻り番地の退避にはスタック領域が使用され,割当てと解放の順序に関連がないデータの格納にはヒープ領域が使用される。」とあります。

以下は、H26秋SC午後1問1の過去問から引用しています。
こんな風にわかれているんだなぁと、雰囲気だけつかんでください。

メモリ領域
応用情報技術者試験を勉強する成子 

なぜ、領域が分かれているのですか?
メモリを使用する変数において、サイズが明確なものと、そうでないものがあるからです。
①明確なもの
変数の値やアドレスなどのサイズがわかっている値を格納する際は、スタック領域を使います。
高速に処理できます。
②動的にメモリを確保するもの
たとえば、ファイルを読み込む際には、ファイルサイズがわからないので、ヒープ領域を使います。自由度が高いですが、ポインタなどでアドレスを参照する必要があり、同じ物理メモリでありながら、スタックよりも低速になります。
また、プログラムで不要な領域を解放することも可能なので、メモリ領域を効率よく使うことが可能。メモリサイズが小さいときは、スタック領域を大きくなりすぎないようにする工夫をしたりします。
⇒一方、メモリを解放しないと、使用効率が悪くなるので、ガーベジコレクションが必要です。
 

sm.seeeko.com

 ヒープ領域に関しては、IPAの資料が参考になります。

www.ipa.go.jp

2.メモリ領域の過去問を解いてみよう

(1)H26秋AP

問15 プログラムの実行時に利用される記憶領域にスタック領域とヒープ領域がある。それらの領域に関する記述のうち,適切なものはどれか。
ア サブルーチンからの戻り番地の退避にはスタック領域が使用され,割当てと解放の順序に関連がないデータの格納にはヒープ領域が使用される。
イ スタック領域には未使用領域が存在するが,ヒープ領域には未使用領域は存在しない。
ウ ヒープ領域はスタック領域の予備領域であり,スタック領域が一杯になった場合にヒープ領域が動的に使用される。
エ ヒープ領域も構造的にはスタックと同じプッシュとホップの操作によって,データの格納と取出しを行う。





イ:ヒープ領域は未使用領域が存在します。
ウ:ヒープ領域とスタック領域は別々の用途で利用され、予備領域という概念はありません。

【正解】ア