メモリ管理とは(全体像)
メモリ管理とは、OSが、メモリ(記憶)の割り当てや解放を管理する機能のことだ。アプリがメモリを使いたいとき、OSが空いている場所を割り当て、不要になったら回収する。仮想記憶(ページング)なども、メモリ管理の一部だ。
ここでカギになるのが、GC(ガーベッジコレクション)。ガーベッジ(garbage)は英語で「ゴミ」のこと。これは、使われなくなったメモリ(ゴミ)を、自動で見つけて片づける仕組みだ。JavaやPythonなどの言語では、これが自動で行われる。
掃除ロボットでたとえると分かりやすい。GCは、部屋の不要品を自動で片づけてくれる掃除ロボットのようなものだ。
ここで一番のポイント。すべての言語が、GC(自動)ではない。「どの言語でも、メモリは自動で片づけられる」と思い込むと誤りで、C/C++などでは、プログラマが手動でメモリを確保・解放する。
詳しく:手動管理と、GCの注意点
ここが心臓部。ポイントを表で押さえよう。
メモリ管理・GCのポイント
| 項目 | やさしい意味 |
|---|---|
| メモリ管理 | OSがメモリの割り当て・解放を管理する |
| GC | 使われなくなったメモリを自動で片づける(Java・Python) |
| 手動管理 | プログラマが自分で確保・解放する(C/C++) |
| GCの注意 | GCの最中は、処理が一瞬止まることもある |
メモリの片づけ方には、2つのやり方がある。GC(自動)は、JavaやPythonのように、使われなくなったメモリを自動で回収する。一方、手動管理は、C/C++のように、プログラマが自分でメモリを確保し、不要になったら解放する。
ここで注意。GCは便利だが、いいことばかりではない。GCが動いている間は、処理が一瞬止まることがある。「GCがあれば、必ず速くなる」と思い込むと誤りになる。
わかりやすく言い換えると
身近なたとえで整理しよう。
GCは、「使わなくなったメモリ(ゴミ)を、自動で片づけてくれる掃除ロボット」のイメージ。JavaやPythonでは、これが自動で動く。
「すべての言語が自動ではない」というのは、C/C++などでは、プログラマが自分で片づける(手動管理)こと。要するに、言語によって、自動か手動かが分かれる。
「GCの注意点」は、掃除ロボットが動いている間は、ちょっと作業が止まることもあること。つまり、GCは便利だが、処理が一瞬止まる場合もある。
試験のツボ
🔴 一番出る:メモリ管理とGC
①メモリ管理=OSがメモリの割り当て・解放を管理する機能
②GC=使われなくなったメモリを自動で片づける(Java・Python)
🔴 次に出る:手動管理もある
①すべての言語が自動(GC)ではない
②C/C++などは、プログラマが手動で確保・解放する
🟡 押さえると安定:GCの注意点
①GCの最中は、処理が一瞬止まることもある
②GCは便利だが、いいことばかりではない
よくある間違い
①「すべての言語で、メモリは自動(GC)で片づけられる」→ ✗ C/C++などでは、プログラマが手動でメモリを確保・解放する。
②「GCがあれば、処理は必ず速くなる」→ ✗ GCの最中は、処理が一瞬止まることもある。いいことばかりではない。
③「メモリ管理は、ユーザーが手作業でメモリを掃除することだ」→ ✗ メモリ管理は、OSがメモリの割り当て・解放を管理する機能。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(メモリ管理の正体)
メモリ管理に関する次の記述のうち、最も適切なものはどれか。
- 社員の出退勤を記録して、毎月の給与を計算するためのしくみだ
- 取引先へ毎月の請求書を郵送する、決まった事務作業のことを指す
- 完成したシステムを宣伝して、より多く売るための広告活動である
- OSが、メモリの割り当てや解放を管理していく機能のことである
解答は 4 だよ!
メモリ管理は、OSが、メモリの割り当てや解放を管理する機能なんだよ!アプリにメモリを割り当てたり、不要になったら回収したりするんだね!
選択肢1は給与計算、選択肢2は請求書の事務、選択肢3は広告で、どれも違うよ!
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 給与計算のしくみではない |
| 2 | ✗ | 請求書の事務の話 |
| 3 | ✗ | 広告活動ではない |
| 4 | ✓ | OSがメモリを管理する機能で正しい |
オリジナル問題2(GCの正体)
GC(ガーベッジコレクション)に関する次の記述のうち、最も適切なものはどれか。
- 社員の給与を計算するときだけ、行われるものだとされている
- 取引先へ請求書を郵送するときだけ、行われるものだとされる
- 使われなくなったメモリを、自動で見つけて片づける仕組みだ
- メモリを、わざと使ったまま放置しておく仕組みだとされている
解答は 3 だよ!
GCは、使われなくなったメモリを、自動で見つけて片づける仕組みなんだよ!部屋を片づける掃除ロボットのイメージだね!JavaやPythonで使われるよ!
選択肢1の給与、選択肢2の請求書、選択肢4の「放置しておく」は、いずれも違うよ!
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 給与計算のときだけではない |
| 2 | ✗ | 請求書のときだけではない |
| 3 | ✓ | 使われないメモリを自動で片づけるで正しい |
| 4 | ✗ | 放置ではなく、片づける仕組み |
オリジナル問題3(手動管理)
メモリの管理方法に関する次の記述のうち、最も適切なものはどれか。
- 社員の給与を計算するときだけ、手動になるとされているものである
- すべての言語が自動(GC)ではなく、C/C++などは手動である
- 取引先への請求書の枚数しだいで、手動になるとされているのである
- どの言語でも、必ず自動(GC)で管理されるとされているのである
解答は 2 だよ!
すべての言語が自動(GC)ではなく、C/C++などは手動なんだよ!言語によって、自動か手動かが分かれるんだね!
選択肢1の給与、選択肢3の請求書、選択肢4の「どの言語でも自動」は、いずれも違うよ!
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 給与計算で手動になるのではない |
| 2 | ✓ | C/C++などは手動で正しい |
| 3 | ✗ | 請求書の枚数で決まるのではない |
| 4 | ✗ | 手動の言語(C/C++)もある |
まとめ
押さえどころ
- 🔴 メモリ管理 = OSが、メモリの割り当てや解放を管理する機能(仮想記憶やGCも一部)。
- 🔴 GC(ガーベッジコレクション) = 使われなくなったメモリを自動で片づける仕組み(Java・Python)。
- 🟡 手動管理とGCの注意 = C/C++などは手動で確保・解放。GCの最中は処理が一瞬止まることもある。
次に学ぶ
執筆: SikakuQuest編集部