「応用情報技術者試験/平成31年春季午前問17」スタック領域とヒープ領域

問題

出典:応用情報技術者平成31年春季午前問17

プログラム実行時に利用される記憶領域にスタック領域とヒープ領域がある。
それらの領域に関する記述のうち、適切なものはどれか。

ア:サブルーチンからの戻り番地の対比にはスタック領域が使用され、割当と開放の順序に関連がないデータにはヒープ領域が使用される。
イ:スタック領域には未使用領域が存在するが、ヒープ領域には未使用領域は存在しない。
ウ:ヒープ領域はスタック領域の予備領域であり、スタック領域が一杯になった場合にヒープ領域が動的に使用される。
エ:ヒープ領域も構造的にはスタックと同じプッシュとポップの操作によって、データの格納と取出しを行う。

用語解説

用語を知っているかの問題なので、用語解説を行う。

スタック領域

スタックとは「積み重ねる」と意味する言葉。

1段1段何かを積み重ねるので、そこから物を取り出す時は上から取り出す必要がある。
(でない取りづらいし崩れる。というかそういう概念だからそう理解して欲しい)

ということは、最初に積んだ物が取り出されるのは最後になる訳であり、最後に積んだ物は最初に取り出されるのである。ちなみにこういう方式をLIFO(ラストイン、ファーストアウト)という。

この仕組を利用して、サーブルーチン終了後の戻りアドレスや局所変数などを保持する。

サーブルーチンとは別名関数であり、関数とは簡単に言うとメイン処理に必要な小道具である。
局所変数とは、関数の中で宣言された変数である。

ヒープ領域

コンピュータプログラムが実行時に使用するメモリ領域のこと。
任意にメモリの確保や開放ができるのが特徴。

解説

上述した知識により、アが正解である。

一応、他の選択肢を消去する。

イ:スタック領域には未使用領域が存在するが、ヒープ領域には未使用領域は存在しない。

ヒープ領域は、プログラム実行時にOS側から一定の大きさのメモリ領域が割り当てられ、初期状態では未使用である。

ウ:ヒープ領域はスタック領域の予備領域であり、スタック領域が一杯になった場合にヒープ領域が動的に使用される。

ヒープ領域とスタック領域は異なる役割なので、予備領域とかそういうのではない。

エ:ヒープ領域も構造的にはスタックと同じプッシュとポップの操作によって、データの格納と取出しを行う。

ヒープ領域は、双方向リストで構成されている。
双方向リストとは、各ノードが「次の情報と前の情報」を持っているものである。
ノードとは全体の内の一つの要素、という抽象概念として認識しておけば良い。

クライアント→ネットワーク→サーバ
とあるならば、「クライアント、ネットワーク、サーバ」のそれぞれがノードである。

解答

正解:ア

アドセンス
改行

テックキャンプ