• ベストアンサー

32bitOSで4GBメモリを使用できない理由

こんにちは。いつもお世話になっています。 Windows XPやVistaの32bit版はメモリスロットに計4GBのメモリを挿しても3GBと少ししか認識しませんよね。 その原因が「アドレス空間」が関係しているというのを見たことがあるのですが、そもそもアドレス空間とは何のことですか?この空間がメモリの認識にどう影響を与えているのか知りたいです。また、何故同じ32bitOSでもそれぞれのPC環境によって認識できる容量に差が出てくるのでしょうか?64bit版ではどこがどう変わって128GB(Vista Business以上)ものメモリを認識できるのでしょうか? たくさん質問してしまって申し訳ありません。 検索してみたのですが少し難しく、私には理解できませんでした。 お時間のあるときでかまいませんので、ご回答よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kusa_mochi
  • ベストアンサー率76% (1597/2087)
回答No.5

簡単に言うなら、マザーボード上の各種デバイスがメモリマップドI/Oという方式で実装されている為、それらの用途で使われているアドレス空間がRAMで使えないのです。 アドレス空間とはCPUが認識出来るアドレスの全てを指します。 32ビットCPUの場合は2^32で4ギガです。 その4ギガの内、アドレス空間の最後の方にメモリマップドI/Oで占有されている部分があるのです。 RAMとメモリマップドI/Oが重なったアドレスは、メモリマップドI/Oが優先されるのです。  4GB - (メモリマップドI/Oが使っているアドレス) = RAMが使えるアドレス ※32ビットCPUの場合 PCによって認識出来るメモリに微妙な差があるのは、マザーボードに搭載されているデバイスの数に違いがある及びBIOS設定によってメモリマップドI/Oに割り当てるアドレス空間のサイズが違ってくる(分かりやすい例だと AGPアパチャードサイズ等)からです。 64ビットCPUの場合、2^64で16エクサのアドレス空間がありますので、  ・RAMはアドレス空間の先頭から割り当て  ・メモリマップドI/Oはアドレス空間の最後の方から割り当て という事情から、4GB程度のメモリならば両者のアドレスの重複は気にする必要がなくなります。 (将来1枚当たり4エクサのメモリモジュールが出てきたら、重複する可能性があるかもしれませんが、ずいぶん先の話でしょう)  【参考:メモリマップドI/O】   http://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%A2%E3%83%AA%E3%83%9E%E3%83%83%E3%83%97%E3%83%89I/O  【参考:アドレス空間】   http://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E7%A9%BA%E9%96%93   

その他の回答 (5)

  • StupidMan
  • ベストアンサー率63% (29/46)
回答No.6

実際にメモリ空間に機器が割り当てられている例です。  http://journal.mycom.co.jp/special/2006/blackford/005.html 32bitと64bit両方があるので他の方の回等と合わせ読んでみて下さい。 最近のパソコンではグラフィックアクセラレータのメモリがアドレス 空間に割り当てる事により使えるメインメモリ量が減少する傾向が多 いようなのでお仕事用ならこの辺は注意してください。 あと、ANo.1さんのリンク先に書いてありますが64bitCPUや64bitOSを 使用しているから大容量のメモリを使えるとは限りません。 御質問者様が書かれているようにVista64bitでもVista Business以上 では128GB対応ですがVista Home Basicでは8GBまでとなっています。  http://www.microsoft.com/japan/windows/products/windowsvista/editions/64bit.mspx ご利用になられるコンピュータ側でも認識可能なメモリの最大量として 制限されるのでこちらも注意が必要です。 (メモリスロット数や動作検証の絡みなのか、チップセットの上限に 達しないものが時々あります)

  • AthlonXP
  • ベストアンサー率20% (190/919)
回答No.4

システム以外に使うからです。 64bitにしないと4GB以上は認識できません。 32bit環境で4GB積んだ場合、 PC環境によって認識できる容量が微妙に違うらしいです。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.3

プログラムがメモリにアクセスするときは、どのメモリにアクセスするかを明示的(例えばプログラムの先頭から128バイトめとか。)に指定する必要があります。 このメモリを指し示す値のことをメモリアドレスといい、アドレスとして指定できる範囲のことをメモリアドレス空間といいます。メモリアドレス空間には、物理メモリアドレス(=ハードウェアとして実際に搭載している主記憶容量)と仮想メモリアドレス(=ソフトウェアが利用できる主記憶容量)のどちらかあるいは両方を意味します。 現在のCPU自体ですと、40ビット(=1テラバイト)の物理メモリと48ビット(=256テラバイト)の仮想記憶を利用できますが、OSレベルでそのすべてを利用できるようにはしてません。 32ビットWindowsプログラムだと自由に使えるのが、2ギガ~3ギガバイト程度ですが、それは 1)CPUで用意されている仮想メモリ機能が4ギガバイトまでだった。 2)それにあわせて、Microsoftがそういう風にWindowsを設計した。 ――ということで、やろうと思えば8ギガバイトにできたのでしょうが、当時のパソコンの性能ですと、逆に非効率的なものになったでしょう。 コンピュータは、ハード+OS+アプリケーションが協調して動作する必要があるので、一方が進みすぎても、残りが追いついてこないと最高性能は引き出せないです。 そういう意味で一番のボトルネックは「ユーザ」だったりします。 まあユーザは、今使っている環境に不満がなければ、なんでわざわざ変えなきゃいけないのか、という。

noname#58440
noname#58440
回答No.2

  32ビットで表現できる最大の数値は、4,294,967,296=4GB 8桁電卓で扱える数値の最大が1億であるのと同じです。 8桁の最大数=99,999,999=1億  

noname#39970
noname#39970
回答No.1

http://oshiete1.goo.ne.jp/kotaeru.php3?q=2146814&rev=1 理論値の極限が4Gだからじゃない?

関連するQ&A