コンピュータの記憶装置は 1 種類ではない。CPU の隣にある超高速だが小さい記憶から、TB クラスだが遅い HDD まで、5-7 段階の階層構造になっています。
1. 記憶階層のピラミッド
| 階層 | アクセス速度 | 容量 | コスト/GB | 揮発/不揮発 |
|---|---|---|---|---|
| レジスタ | 1 サイクル (0.3ns) | 数 KB | (計算不能) | 揮発 |
| L1 キャッシュ | 4 サイクル (1ns) | 32-64KB | 10 万円 | 揮発 |
| L2 キャッシュ | 12 サイクル (3ns) | 256KB-1MB | 1 万円 | 揮発 |
| L3 キャッシュ | 40 サイクル (10ns) | 8-32MB | 1000 円 | 揮発 |
| RAM (DRAM) | 100ns | 8-128GB | 100 円 | 揮発 |
| NVMe SSD | 10-100μs | 0.5-8TB | 10 円 | 不揮発 |
| SATA SSD | 100μs | 0.5-4TB | 8 円 | 不揮発 |
| HDD | 5-10ms | 1-20TB | 2 円 | 不揮発 |
| テープ (LTO) | 数十秒〜分 | 12-45TB | 0.5 円 | 不揮発 |
速度差は 5000 万倍、コスト差は 20 万倍。これが階層化の理由。
2. キャッシュの役割
「同じデータを近くに繰り返し使うことが多い」 (時間的局所性) と 「あるデータの近くにあるデータも使うことが多い」 (空間的局所性) という性質を利用して、頻繁に使うデータを CPU の隣に置く。これが キャッシュ。
キャッシュ友好的なコード vs 非友好的なコード
Python
import numpy as np
# 連続メモリ配置 (キャッシュ友好的)arr = np.arange(10_000_000)%timeit arr.sum() # 速い
# ランダムアクセス (キャッシュ非友好的)indices = np.random.permutation(10_000_000)%timeit arr[indices].sum() # 遅い (10 倍以上)3. RAM の容量目安
| 用途 | 推奨 RAM | 理由 |
|---|---|---|
| メールと Web ブラウジング | 8GB | Chrome 数タブ + Office 程度 |
| プログラミング (Python・Web) | 16GB | IDE + ブラウザ + Docker |
| 動画編集 / 機械学習 | 32-64GB | 大きな画像/動画/モデル |
| 仮想マシン / 大規模データ | 64GB+ | VM 同時起動、メモリ DB |
4. SSD と HDD の使い分け
- OS とアプリは SSD: 起動・読込みが劇的に速い
- データ保管は HDD or 大容量 SSD: コスト次第
- 最近は SSD のみ: 価格が下がり HDD は撤退方向 (デスクトップ用途)
- バックアップ: 別の物理ドライブ + クラウドの 2 重化
5. メモリ不足のサイン
- アプリ切替時に「待ち」が頻発する
- ディスクアクセス LED が常時点灯
- ファンが常時高速回転 (スワップで CPU が忙しい)
- 「メモリが不足しています」のシステム警告
- 対処: 不要なアプリを閉じる → メモリ増設 → SSD 化 (HDD ならスワップが地獄)
6. 次の話
EP.06 では OS の役割 へ。CPU・メモリ・ディスクという物理的な資源を、複数のアプリでどう共有して動かすかの仕組みを覗きます。
この記事の感想を教えてください
あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。