【めもりかんり】

メモリ管理 とは?

💡 プログラムに「作業机」を割り当てるしくみ
📌 このページのポイント
メモリ管理:スタックとヒープ スタック領域 後入れ先出し(LIFO) main() のローカル変数 funcA() のローカル変数 funcB() のローカル変数 top 空き 自動で確保・解放 ヒープ領域 配列データ 文字列オブジェクト 空き ユーザー オブジェクト 空き リスト ノード 空き Map 空き領域(断片化しがち) 手動 or GCで確保・解放 スタック:高速・固定サイズ ヒープ:柔軟・可変サイズ スタック:関数終了で自動解放 ヒープ:明示的に解放が必要
スタックは整然と積み重なり、ヒープは自由に確保・解放される
ひよこ ひよこ

メモリ管理って難しそうな響きだけど何するの?

ペンギン先生 ペンギン先生

机の上のスペース(RAM)を、どのプログラムにどれだけ割り当てるかを管理することだよ。プログラムは動くときに「作業スペース」としてメモリを借りて使うんだ。

ひよこ ひよこ

使い終わったら返さないとだめなの?

ペンギン先生 ペンギン先生

そうなんだ!返さないと「メモリリーク」って状態になって、どんどんメモリが埋まっていく。ブラウザのタブをいっぱい開いてパソコンが重くなるのも似たような現象だよ。

ひよこ ひよこ

スタックヒープって何?

ペンギン先生 ペンギン先生

スタックは関数が使う一時的なメモリで、関数が終わると自動的に解放されるんだ。ヒープは自分で確保・解放する自由なメモリ領域で、大きなデータや長く使うデータを置く場所だよ。

ひよこ ひよこ

じゃあヒープを多く使えば何でも解決?

ペンギン先生 ペンギン先生

ここが中上級者でも混乱するポイントで、ヒープは確保・解放が遅くてメモリの断片化も起きやすいんだ。「スタックヒープをどう使い分けるか」はパフォーマンスに直結するから、Rustみたいにメモリをコンパイラがチェックするユニークな言語も生まれたくらい重要なテーマなんだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
メモリ管理って出てきたら「プログラムRAMを借りて使って返すしくみ」と思えばだいたいOK!
📖 おまけ:英語の意味
「Memory Management」 = メモリ管理
💬 ここでいうメモリはRAM(Random Access Memory)のこと。ストレージ(HDD/SSD)とは別物
← 用語集にもどる