2005年01月19日
川俣晶の縁側IT都市伝説 total 44557 count

32bit CPUはメモリを4GBしか使うことができない

Written By: 川俣 晶連絡先

 誰が言い出したのか、まことしやかに流布される謎の解釈。

 今回のIT都市伝説はこれだ!

32bit CPUはメモリを4GBしか使うことができない §

 32bit CPUは4GB(ギガバイト)のメモリ空間しか持っていません。

 ですから、4GB以上のメモリを接続することはできず、それを使うこともできません。

なんてことはないのだ、実は §

 実際には、32bit CPUであっても、4GBよりも大きなメモリを扱えるケースが多くあります。

 32bit CPUが4GBより大きなメモリを扱えないというのは、アーキテクチャに関するまったくの不勉強そのもの、と言えます。OSや開発ツールが見せかけている構造と、実際の構造の相違を混同している、と表現しても良いでしょう。

物理メモリ空間と論理メモリ空間 §

 物理的にCPUに接続できるメモリのメモリ空間は、主にCPUからアドレスバスが何本出ているかで決まります。(物理メモリ空間)

 それに対して、プログラムがアクセス可能なメモリ空間は、CPUの論理的なアーキテクチャで決まります。(論理メモリ空間)

 通常、仮想メモリの技術を使うことで、物理的に存在する容量を超えて、プログラムはメモリを使うことができます。

 ですので、両者の関係は"論理メモリ空間 >= 物理メモリ空間"となると容易に予測できます。

 32bit CPUでアクセスできる論理メモリ空間は32bitをフルに使っても4GBにしかならず、それゆえに利用可能な物理メモリ空間も4GB以上になり得ない、という予測が立てられるでしょう。

 この結論を肯定するなら「32bit CPUはメモリを4GBしか使うことができない」という主張は正しいことになります。

いにしえの386ですらメモリ空間のサイズは4GBではなかった! §

 しかし、ここには1つの罠があります。

 32bit CPUの論理メモリ空間は4GBという前提そのものが、実は誤りです。

 大半のプログラマは、32bit CPUの論理メモリ空間にアクセスするために(明示的にか暗黙的にか)32bitのポインターを使うことを前提にしていると思います。

 しかし、それはOSのアーキテクチャが、ユーザーには32bitのメモリ空間しか使わせないという前提と取ったために起こった状況でしかありません。それはCPUの能力の限界と同じではないのです。

 具体的に言えば、32bitのx86アーキテクチャは、48bitの論理メモリ空間を持ちます。いにしえの386の時代から48bitなのです。より具体的に言えば、16bitのセレクタ+32bitのオフセット値からなるアドレス指定が使われます。これは、8086の16bitセグメント値+16bitオフセット値からなるアドレッシングの順当な進化形であると言えます。

物理メモリはどうだ!? §

 4GB超えるの論理メモリ空間があることは、4GBを超える物理メモリを実装できる根拠になりません。実際、386は4GBの物理メモリ空間しかありません。

 では、最近のCPUではどうでしょうか。

 以下の資料をちらっと見てみました。

 ピン配置を見ると、アドレスバスはA3からA35まで存在します。つまり、36bitの物理メモリアドレスを扱う機能があることを意味します。(ちなみに、64bit単位でデータをやり取りするので、A0~A2に相当するピンはない)。

 これは、64GBの物理メモリを扱うことが可能であることを意味します。

仮想メモリ空間は物理メモリを共有しないかもしれない §

 単純にCPUのハード的なアーキテクチャだけの話をすれば、ある32bitポインタが指し示す物理的なメモリ(ページ)が、全てのプロセスで同じである必然性はありません。

 たとえば、8GBの物理メモリがあって、2GBのメモリを確保する4つのプロセスが実行されている時、各々のプロセスは異なる物理的な2GBのメモリを所有している形態が考えられます。この場合、個々のプロセスは、32bitポインタがあれば自分が所有するメモリにすべてアクセスできます。しかし、それにも関わらず、4GBを超えたメモリがフル活用されています。

 これは机上の空論として書いた事例ですが、このようなアーキテクチャは(実際にあるかどうかは分かりませんが)、実現不可能ではないと思います。

 少なくとも、仮に物理メモリが2GBや4GBに制限されたOSがあったとしても、その理由は特定のOSやCPUのアーキテクチャにある可能性はあっても、一般論として「32bit CPUだから」とは言えない、と言っても良いような気がします。