前からもかる~く知っていた話ですが、同僚からWinXP(32bit)にメモリ4GB置いても4GBは認識されないとか聞いたので、詳しいことについていろいろ調べてみました。実はこれにはいろいろ深い話がついて回るみたいです。OSの制限、アーキテクチャ自体の制限、etc..アーキテクチャの制限まずアーキテクチャ自体の制限からです。前提として32bitアーキテクチャでは物理メモリは最大4GB、つまり物理メモリアドレスも4GBまでしかサポートされていません。ところで、データの入出力、保存(ビデオカードetc)などを行う装置はおおむねIOメモリと呼ばれるデータ置き場を持っており、CPUはその装置に何かして欲しい(とソフトに書いてあった)時は装置への命令やデータを書き込みます。(このMMIOが主流になったのはi386の時代からみたいです)MMIOはIOを行うデバイスごとにメモリ空間を消費します。MMIOは3-4GB付近のアドレス空間を予約して使用しています。(デバイスの数や種類等でどれくらい使われているかは変わってくるらしいですが...)つまりOS側から見ると3-4GB付近は既にデバイスへのIO用として使用されている領域になっているのです。確かにデバイスマネージャで各でデバイスのプロパティ->リソースからリソースの種類が"メモリの範囲"という部分の予約メモリアドレス見ると4GB付近を利用していることがわかります。Intelのサイトにはこう書いています。インターフェイス用に確保されたアドレス部分のメモリー領域は、物理メモリー側では使用されません。---------------------------この制限があるために3GB以上のメモリがあっても3GB以上(環境によってしきい値は異なりますが)の領域は使用されない無駄な領域となってしまいます。悲しきかな32bitとIO周りの限界。Remap)、4GB以降のアドレス(/PAE)が可能となるようです。有効にしても結局無駄ということです。Vistaと同じでしょう。SP1でも3GBの壁問題は解決されないの記事を参照。PAE有効で実験の記事で書かれていますが、やはり無理だったようです。CPU,チップセット等の対応が必要です。よって32bitのXPやVistaには手がありません。(Vistaは不明)、仮想アドレス空間は2Gまではユーザモード、2Gから4Gまではカーネルが使用します。いうオプションを入れると3GBまでの空間がユーザモードで使えるようです。調査不足な面もあると思うんで、暇があったらじっくり調べてみたい論題ですね。Windowsのメモリ管理はなかなか扱っているところが少ないのが残念です。MMIOの説明が簡単にのってます。PAEやOSの内部メモリアドレス空間、/3GBスイッチについての公式な情報です。情シスで何でも屋の三流プログラマのコーディング、サーバ管理、PC生活関係のメモ書き。このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。29検索カテゴリ全体Linuxサーバがらみ.Net開発PHP開発C/C++開発JavaSQLツール思ったこととかニュースとか。メッセージを入力してください。