【めもりかんり】

メモリ管理 とは?

最終更新:
💡 作業スペースを用意し、使い終わったら片付ける

プログラムが使うメモリを確保し、使用し、不要になった領域を再利用できるようにする管理。OSの仮想メモリ管理と、言語や実行環境によるオブジェクトなどの管理がある。手動解放、GC、所有権など、方法は言語によって異なる。

📌 このページのポイント
メモリ管理:作業場所を片付ける確保場所を用意使用データを使う解放再利用できる管理方法は言語によって違うC手動管理JavaScriptGCRust所有権など
確保・使用・解放の流れと、代表的な言語の方法。解放後、領域は再利用できるようになる。
ひよこ ひよこ
メモリ管理って、何を片付けるの?
ペンギン先生 ペンギン先生
プログラムがデータを置く作業スペースだよ。必要な領域を確保して、読み書きに使い、不要になったら解放して再利用できるようにする。机のスペースを用意して、作業後に片付けるイメージだね。
ひよこ ひよこ
OSだけが管理しているの?
ペンギン先生 ペンギン先生
役割は複数あるよ。たとえばWindowsは各プロセスに仮想アドレス空間を用意し、物理メモリの場所と対応させる。その上で言語や実行環境が、オブジェクトなどに使う領域の確保や解放を管理するんだ。
ひよこ ひよこ
スタックとヒープはどう違う?
ペンギン先生 ペンギン先生
代表的な実装では、スタックは関数の呼び出しに沿って一時的な領域を積み重ね、戻ると取り除く。ヒープは動的に確保するデータなどに使うよ。具体的な配置は言語や実装で異なり、「ヒープなら必ず自分で解放する」わけではないね。
ひよこ ひよこ
自分で解放しなくてよい言語もある?
ペンギン先生 ペンギン先生
あるよ。Cにはmalloc/freeのような手動管理の仕組みがある。JavaScriptではGCが到達できなくなったオブジェクトの領域を回収する。Rustは所有権などの規則により、所有者がスコープを出ると値を破棄するなど、別の方法を使うんだ。
ひよこ ひよこ
GCがあれば、メモリリークは起きない?
ペンギン先生 ペンギン先生
不要になったデータでも、使える参照が残っていれば回収されない場合があるよ。たとえば使い終わったデータを保存用の配列に残し続けると、メモリが増えることがある。ただしブラウザのタブを増やして使用量が増えたことだけで、リークとは判断できないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「メモリ管理」って出てきたら「プログラムの作業スペースを確保し、不要になったら再利用できるようにすること」と思えばだいたいOK!
📖 おまけ:英語の意味
「Memory Management」 = メモリ管理
💬 データを置くメモリ領域の確保・使用・解放を管理すること。OSとプログラミング言語・実行環境で、担当する範囲が異なるよ。

参考資料

← 用語集にもどる