skillup

技術ブログ

プログラミング全般

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

投稿日:

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

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

静的

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

スタック

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

メモリ管理

ヒープ

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

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

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

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

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

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

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

 

-プログラミング全般

執筆者:


comment

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

関連記事

no image

コレクションの頻出処理に関して

PHPでコレクションを使っていますが、慣れると本当に便利ですね・・・まあforeachとかでグリグリやってもいいのですが、無駄にコードが長くなります。 自分がコレクションでよく使う再頻出のメソッドなど …

no image

小〜中規模程度のWEBアプリ作成で気をつけるべきこと

初見の処理系(ライブラリ操作)などは休日などで最小パターンを確認しておくこと。実務で何時間も悩むと非常にストレスがたまる テーブル設計命。あとで終えるようにトレースができるような値を入れておくこと。 …

no image

データ構造の基礎知識 前編 メモリとポインタ、配列と連結リスト

WEB+DB(vol91)で使えそうな連載記事がありますのでブログにメモリます。 テーマはデータ構造です。 Contents1 データ構造とは?2 計算量3 プログラムとメモリ4 配列について4.1 …

no image

CIことはじめ

業務でJavaのテキスト変換ツールを作成。 プログラムよりもCIツールを使って他人の環境下で正常に稼動させるためにどうするかの調査に時間かかりましたね。 今回やりたかったことは下記の通りです。いわゆる …

no image

ファジープロジェクト対策 その1

5月ぐらいから着手していたプロジェクト(顧客管理ソフト)が終焉を迎え、検証段階に入ったので、記して置きたいことなど。 数ヶ月程度ですが、自分が携わったプロジェクトの中では過去最大クラスのものでした。 …