skillup

技術ブログ

プログラミング全般

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

投稿日:

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

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

静的

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

スタック

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

メモリ管理

ヒープ

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

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

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

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

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

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

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

 

-プログラミング全般

執筆者:


comment

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

関連記事

no image

1度に1つのことを

今回のリーダブルコードの概念はやや抽象的。 要は一度に行うタスクは1つにする、というところがポイントになります。 そのための手法として下記のようなことを上げています。 コードが行っているタスクをすべて …

no image

フレームワークのマイナーバージョンチェンジの影響に関して

ここ1年ぐらいPHPのフレームワークはLaravelを使っていますが、マイナーバージョンの影響に悩まされることがたまにあります。 以前、遭遇した事象としてはログイン連携が急にできなくなりました。 La …

no image

シェルの基礎+ユーザー切り替え関連

雑誌を見ていたらシェルの特集があったので、ちょっとメモリます。 補強したいところのみ要点をチェック。 Contents0.1 実行パスについて0.2 ビルドインコマンド0.3 シェル変数・環境変数0. …

no image

短いコードを書く

私が普段コードを書くときに考えていることは常にいかに短くかけるか、ということといかにバグを生み出さないかということです。 基本的にはできるだけ、短くシンプルに書くようにしています。 そうすることであと …

no image

オブジェクト指向設計 依存関係の管理

オブジェクト指向シリーズ。読みにくい本が多い中でオブジェクト指向設計実践ガイドは勉強になるなー。 Contents1 依存関係の管理1.1 メモ1.2 実際のコーディング上のコツ1.3 感想 依存関係 …