アドレス指定してアクセスしてるじゃん
無作為じゃないぢゃん。
いくら僕が統計学エアプだからって、さすがにそのくらいの言葉の意味は分かるぞ。
とここまで書いたら GitHub Copilot が補完で勝手に教えてくれた。
RAM は「Random Access Memory」の略で、「ランダムアクセス可能なメモリ」を意味します。ここでの「ランダムアクセス」とは、データに対して任意のアドレスを指定して直接アクセスできることを指します。
ここでの「random」は、「無作為」という意味ではないらしい。
RAM の仕組み
RAM 上にデータを記憶させる際、メモリ空間のどこにデータを配置するかをアドレスとして指定します。
CPU はこのアドレスを使って、必要なデータに直接アクセスします。
例えば Python だと、それぞれのオブジェクトのメモリアドレスはこんな感じで確認できます。
a = 1
b = [1, 2, 3]
print("a: ", id(a))
print("b: ", id(b))
a = 2
print("a: ", id(a))
a = b
print("a: ", id(a))
a: 101374310002960
b: 126700729950080 # もちろんaと違うアドレス
a: 101374310002992 # aの値を変えると異なるオブジェクトができる
a: 126700729950080 # 配列は参照渡し(bと同じアドレス)
(これ「参照渡し」じゃなくて「参照の値渡し」なんでしたっけ。本題からずれそうなので、一旦この表現にします)
ランダムアクセスは、「任意のアドレスを指定してアクセスする」方式というわけですね。
逆にランダムじゃないアクセスって?
対になるのは「シーケンシャルアクセス」という方式で、データに先頭から順番にアクセスしていくというものです。
RAM が頭にあると「そんなものあるのか?」と一瞬思ったのですが、磁気テープや CD なんかがその例になります。
これらを使用する際、目的のデータに到達するためには、まず先頭から順番に読み進めていく必要があります。つまり、「早送り」しないといけないわけですね。
アクセスしたいデータが 1GB 先にあったらそれだけ読み込まないといけないわけで、当然ランダムアクセスに比べて時間がかかるので、主記憶には使われません。
まとめ
- RAM は「Random Access Memory」の略で、「任意のアドレスを指定して直接アクセスできるメモリ」を意味する
- 対になるのは「シーケンシャルアクセス」で、データの先頭から順番にアクセスしていく方式