ヒープメモリって、そもそもナニ?

はじめに
プログラミングをしていると、よく耳にする言葉があります。それが「ヒープメモリ(Heap Memory)」。(Heapは英語で「山積み、堆積」などの意味)
でも、これって一体なんなんでしょう?なんだかむずかしそうな名前ですよね。
そこで今回は、コンピュータの「記憶の使い方」という観点から、ゆっくり見ていきましょう。
コンピュータの「机」と「引き出し」
まず、あなたが“プログラムを書く人”だとして、頭の中でこう想像してみてください。
あなたの目の前に「机」と「引き出し」があります。机の上では、今すぐ使うものを広げたり片付けたりします。
一方、引き出しには、あとで使う資料や一時的に保管したいものを入れておきます。
この「机」が、コンピュータでいうスタックメモリ(Stack Memory)であり、そして「引き出し」が、ヒープメモリ(Heap Memory)なんです。
合わせて読みたい
スタックとヒープの違い
| 例え | メモリの種類 | 特徴 |
| 机の上 | スタックメモリ | すぐに使う物を置く、一時的。自動で片付く。 |
| 引き出し | ヒープメモリ | 長く使うデータを入れる。自分で入れて、自分で片付ける。 |
スタックメモリは、プログラムの関数を呼び出すたびに自動的に用意され、終わると勝手に片付けてくれる便利な領域です。
一方のヒープメモリは、自分で「使いたい」と頼んで確保し、いらなくなったら自分で片付けるというルールになっています。
ちょっとだけ専門家に
たとえばC言語などでは、ヒープメモリを使うときに malloc()(Memory allocation: メモリを確保する関数)を呼び、使い終わったら free()(メモリを解放する関数)を使います。
これを忘れると、「引き出しに物が溜まってパンパン」──つまりメモリリーク(メモリの無駄遣い)になります。
ゴミが溜まりすぎると、コンピュータの動きがだんだん重くなる、なんてことも。
合わせて読みたい
じゃあ、なぜわざわざヒープを使うの?
そう聞くと、「じゃあ全部スタックでいいんじゃ?」と思うかもしれません。
でも、スタックには制限があります。
たとえば:
- 一時的な関数の中でしか使えない
- 大きなデータを置くには狭い
- プログラムを抜けると消えてしまう
そんなときは、ヒープの出番です。
ヒープなら、「関数をまたいでデータを共有」したり、「好きなだけメモリを確保」したりできます。
つまり柔軟で、自由度が高いんです。
ヒープは自由。でも責任も伴う
ヒープメモリは、いわば「広くて自由な倉庫」。でも自由には責任がつきものです。
倉庫を借りっぱなしにして忘れてしまう──
つまり確保したメモリを解放しないと、倉庫代(メモリ)がどんどん増えてしまうのです。
最近の言語(Python、Java、C# など)は「ガベージコレクション(不要なメモリを自動で片付ける仕組み)」があるので、忘れても多少はなんとかしてくれます。
でも、仕組みを理解しておくことが、安定したプログラムを書く第一歩です。
合わせて読みたい
まとめ
ヒープメモリを一言で表すなら「自分で管理する引き出し型メモリ」となりますね。
- スタック:自動で片付く、すぐ使うための机の上
- ヒープ:自分で使い、自分で片付ける、引き出しスペース
ヒープメモリを理解することは、「プログラムがどんなふうに記憶を使っているか」を理解する第一歩です。
少しずつ、プログラムの「頭の中」をのぞいてみましょう。


