スタックとヒープ

「Hey! Java Programming! //メモリ//」(http://www.mars.dti.ne.jp/~torao/program/general/memory.html)より以下引用。

プログラムが使用するメモリ領域というのは、基本的にスタック (Stack)、ヒープ (Heap)、実行コード、そして恒久変数領域に分けられます。

スタック領域
スタック領域は一般的な変数を保存して置く場所です。プログラムから int x; のように宣言された変数はすべてスタック領域に置かれます。

スタック領域の大きさはコンパイルされるときに決定され、プログラムが起動するとその大きさのメモリがスタックとして予約されます。

ヒープ領域
ヒープ領域は、プログラムが使用できるメモリの中から上記のものを差し引いた『余りの部分』となります。上記の全ての領域はコンパイルしたときに大きさが決定されますが、ヒープの大きさはコンピュータがつんでいるメモリの大きさによりますし、オペレーティングシステムがプログラムに割り当ててくれるメモリの量に依存しています。つまり、ヒープ領域は実行してみるまで大きさがわかりません。通常はスタックと比べてかなり大きな領域となるでしょう。

なるほろなるほろ。