私は以前、仕事で某社の社内ヘルプデスクにいたのだが、そこではパソコンの調達も担当していた。
社内で選定したパソコンのカタログから商品を選んでもらうのだが、ときどき32ビットWindowsに6GBとか8GBのメモリを積もうとする方がいらっしゃった。とにかくメモリを積めば速くなると思われているようだが、32ビットWindowsは最大でも4GBまでしか認識しないので、残念ながらこれ以上メモリを積んでも意味はないため、購買を諦めてもらった。
ではなぜ4GBなのか。
メモリにはバイトごとに番地がついているが、OSはその番地を指すことでメモリからデータを取得したり、メモリにデータを格納したりしている。
たとえば現実にはありえないが、1ビット版OSがあったとする。1ビットで表せるのは、「0」と「1」の2種類だけだ。このOSが認識できるメモリは、2バイトということになる。
2ビットなら「00」「01」「10」「11」の4種類を表すことができ、したがってOSが認識できるメモリは4バイトとなる。
ビットが増えるたびに、扱える数は2倍になる。これまでのビットパターンの先頭にそれぞれ0と1の2種類が増えるからだ。
「0 + これまでのビットパターン」「1 + これまでのビットパターン」
1ビットで2パターン、2ビットで4パターン、3ビットで8パターンと増えていく。
4ビットなら2*2*2*2で16パターンだ。
これは2の乗数で表すことができる。つまり2のビット乗が、扱えるバイト数ということになる。
では32ビットではどうか。
手計算は面倒なので、電卓を使おう。
まず表示メニューから関数電卓に変えて、次の順でクリックする。
すると、結果は「4294967296」と出る。
これはバイトなので、まずキロバイトに直してみよう。
バイトをキロバイトに直すには、1024で割ればいい。
結果は4194304となった。
メガバイトに直すには、さらに1024で割る。
結果は4096。
ギガバイトに直すには、さらに1024で割る。
結果は4。
32ビットOSでは4GBまでしか扱えないというのは、つまりそういうことなのだ。
1000じゃなくて1024で割るのは、コンピューターの世界では2の10乗=1024を1000の近似値として単位として扱っている為である。1000を単位とするキロと紛らわしいため、1024をキロビットバイトの略で1キビバイト(1KiB)という表記が策定されたが、あまり普及しているようには思えない。
ところで、64ビットでは扱えるバイト数が爆発的に増えている。
計算すると、17179869184ギガバイトまで扱える。
ビット数は2倍なのに、扱えるメモリは約40億倍!!
…まあ、理論上の話である。
実際はWindows 10 Home 64bitで128GB、Proで512GBまでしかサポートされていない。
サーバーOSであるWindows Server 2012 R2 Standardでも、4TBが上限だ。
加えて、ハードウェアによって制限もあるので、搭載できるメモリは各パソコンによる。
まあそれでも、16GBとか32GBなんてのはこれから先、当たり前になってくるだろう。
これまでメモリを食うプログラムは悪者だったが、これから先は違う。
広大なメモリをフル活用して、サクっと処理を終わらせるのが良いプログラムなのだ。