skillup

技術ブログ

プログラミング全般

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

投稿日:

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

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

静的

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

スタック

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

メモリ管理

ヒープ

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

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

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

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

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

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

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

 

-プログラミング全般

執筆者:


comment

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

関連記事

no image

コードの分割

今回はリーダブルコードの8章。コードの分割について。 ポイントとしては1行に情報を詰め込みすぎているような場合は分割して、意味がわかりやすい区切りにまとめよう、といったことでしょうか。つまりは「困難は …

no image

ExcelVBAでの他のアプリの起動

2日続けてExcelVBA。 やはり細かく分けてすぐにプロシージャごとにテストできるのはものすごく大きなメリットですね。本日は別のアプリ起動と操作に関して。 自分がやったことはWordとメモを起動して …

no image

画面テストのツールに関して

Unitテストに関してはxUnit一択だと思いますが、UI系のテストツールについて。 IDE(コードを書かずにすむマクロ系)に関して全てChromeで動くことを確認しています。 Contents1 ツ …

no image

正規表現に関して

SQLネタをいろいろと書いておりますが、ちょっとワンポイント的なネタで正規表現について書きたいと思います。 平均的なものは知っているつもりでしたが、シェルの正規表現について知らなかったのでちょっとメモ …

no image

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

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