skillup

技術ブログ

プログラミング全般

メモリに関して 静的領域、スタック、ヒープなど

投稿日:

実務でメモリの調査をしましたが、肝心のメモリについてほとんどわかっていないのでメモ。

メモリの領域を大きく分けると静的、スタック、ヒープに別れる。

静的

  • 読んで字のごとく、プログラムが開始されて、終了するまで固定的な領域。
  • グローバル変数やコード自体などはここに格納される。全アプリケーション共通の領域。

スタック

  • メソッドが逐一実行される時に使われる領域。
  • スタックという文字の通り、実行される場合はこの領域に、格納され、終わるとここから取り除かれる。1スレッドで1つの領域が使われる。
  • 特定のスコープのみに対して使用されるため、メモリ管理がしやすい反面、大きいデータの格納には向いていない。
  • 値型はここに格納される。
  • オブジェクトのデータはポインタがここに格納され、実データは後述するヒープ領域で管理される。

メモリ管理

ヒープ

  • 開始時に一定領域確保され、必要の都度アプリケーションに割り当てられる。
  • 大きいデータ、スコープがはっきりしないもの、サイズが動的なデータなどの格納に向いている。
  • 領域が動的な代わりに少し遅い。
  • 全アプリケーションで1つ。
  • クラスの実態はこの領域に実データが格納される。
  • 下記記リンクの説明は実データとポインタのイメージが掴みやすい。
    オブジェクト指向講座 スタック領域とヒープ領域

以前やった時よりはイメージがしやすくなったかな・・・

基本的にはスタックで随時データを管理し、自由度の高いヒープを都度使うというかんじ。

色々調べたけれど、実例と図解が使ってあるものはわかりやすく、言葉だけで説明しようとしているものは読む気にならない(汗)自分が説明する時に参考になる。

その他参考になったリンクや書籍など

オブジェクト指向でなぜ作るのか

スタックメモリとヒープメモリ

 

-プログラミング全般

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

読みやすいコードについて

コードリーディングにおいて聖典となっているリーダブルコードについて読んでいこうかと。 ただ読んでいくだけではつまらないので、自分なりの考え方も書いていきます。 Contents1 優れたコードの定義1 …

no image

webの仕組み その1 Webの基本的なイメージ

Webの仕組みについて基礎からちょっと勉強しようかと。自分用なのでまとまってません(爆) Contents1 Webの基本的なイメージ2 HTTPメソッド Webの基本的なイメージ ネットワーク上のリ …

no image

クラスメソッドとインスタンスメソッド

以前staticメソッドを定義したときに、記法がインスタンスメソッドの呼び方でも呼べてしまうことがあったので、これを機にインスタンス・クラス×変数・メソッドちょっと調べてみました。 言葉で書くよりコー …

no image

コードの抽象化

リーダブルコードも終盤に少しずつ近づいてきました。 今まではどちらかというとコードの点や線の技術に注目してきましたが、これからは面的な要素に注目していきます。 リーダブルコードでは「無関係の下位問題を …

no image

テストコードの考え方

一般的なプログラマにとって日々の業務で何がいやかというと、 理不尽な納期 むちゃくちゃな仕様変更 頻発するバグ・不具合 であることは異論がないでしょう。仕様変更や納期などは自分で何とかしがたい部分もあ …