【プログラム】メモリ領域 ~静的領域 / スタック領域 / ヒープ領域 ~

メモリ領域

 * プログラムの実行時に利用される記憶領域
  1) 静的領域
  2) スタック領域(Stack)
  3) ヒープ領域(Heap)

静的領域

 * 以下の用途で使われる
  + 外部変数(グローバル変数)
  + 静的変数(static変数)

スタック領域

 * 以下の用途で使われる
  + ローカル変数
  + 関数呼び出しの際の引数
  + 関数呼び出し元(関数の実行が終了した後の戻り先)
 * OS やコンパイラが自動的に領域を割り当てるため、
   データの格納と破棄を行うコードは、プログラマーが意識する必要はない
 => 逆に、使用できるサイズは決まっているので、使いすぎるとスタックがオーバーフローし、
  他の領域を書きつぶしてしまうという問題がある
 => 再帰関数などでスタックオーバーフローのエラーを起こす可能性がある(詳細は、以下の関連記事を参照のこと)
 * LIFO方式(Last In, First Out, 後入れ先出し)で構成
http://blogs.yahoo.co.jp/dk521123/34536714.html

ヒープ領域

 * プログラム上から動的に確保できるメモリ領域
 * 動的にメモリ取得・解放を繰り返すことによりメモリ上にどこからも参照されない領域(ガベージ)が発生する
 * 双方向リストで構成

問題

 * 理解を確認および深めるために...
http://www.ap-siken.com/kakomon/21_haru/q18.html
http://labs.opentone.co.jp/?p=274


関連記事

Java のメモリ構造

https://blogs.yahoo.co.jp/dk521123/33622631.html

【VisualStudio】デバッグビルド / リリースビルド

http://blogs.yahoo.co.jp/dk521123/15233651.html