4GBのメモリが3327MB しか認識しない

4GBのメモリが3327MB しか認識しない。
なぜ4G使えないのか。せっかくメモリを買ったのに…。

こんなのを発見。

Windows Vista または Windows Server 2003 で報告されるメモリ容量が予想より少ない
http://support.microsoft.com/kb/929580/ja

この問題は、32 ビットのハードウェア環境では、アドレス空間が 4 GB に制限されるために発生します。BIOS (Basic Input/Output System) がハードウェア用に予約するアドレス空間を確保するために、メモリが再配置されることがあります。しかし、この制限が原因で、Windows Server 2003 および Windows Vista では 4 GB の境界を越えて再配置されるメモリにはアクセスできません。

何だか文章が難しいね。

32 ビットのオペレーティング システムでは、次の条件に該当する場合にのみ 4 GB の境界を越えて再配置されたメモリにアクセスできます。
• コンピュータが、物理アドレス拡張 (PAE) モードである。
• コンピュータに 4 GB の RAM が搭載されている。

上記の場合は、インストールされているメモリ容量がオペレーティング システムによって正しく報告されます。

え!?できるの!?
PAEモードにすればいいのか。

PAEとは、
Physical Address Extension、物理アドレス拡張。x86アーキテクチャのプロセッサにおける、Windows NTシステムにて4Gbytes以上(最大8Gbytesまで)の物理メモリを利用可能にする技術。仮想メモリ・アドレスから物理メモリ・アドレスへの変換時に、変換テーブルの段数を2段から3段に増やし、プロセッサがアクセスしうる物理メモリ・アドレスを拡張する。ただし、PAEには、メモリアクセス時に常にオーバーへッドを発生させてしまうというデメリットもある。物理的なアドレスラインが36bitある、 Intel社製のPentium Pro以降のプロセッサ(Pentiumまでは32bit)でサポートされている。

PAE モードを有効にするには、BCD ファイルのブート エントリに PAE を追加する必要があります。管理者の権限でコマンド プロンプトを開き、BCDEDIT /SET PAE ForceEnable と入力します。

だって。
ちなみにこれって元に戻せるんだろうね…。
色々調べてみるとやっても無駄らしいぞ。

http://journal.mycom.co.jp/column/sopinion/231/index.html
最近のマザーボードの場合、4GBのメモリを積んでも3.5GBとか3.2GBしか認識されない、なんて事を良く聞く。これは実は当然なのであって、PCIやPCI Express、あるいはこれと同じAPIを使うもの(HyperTransport Linkなどもその一例だ)を使う限り、4GBを積んで4GBと認識されることはありえない。論より証拠、先日緊急レビューをやったASUSTeKのMaximus Formula Special Editionの場合、32bit環境では3227MBしかメモリが認識されない。勿論これは32bit版を使った場合「だけ」で、64bit版だときちんと4GBとして認識される。今まで問題にならなかったのは、32bit環境で本当に4GBを積める製品が少なかった(サーバー向けのマザーボード位のものだった)から誰もこういう事態に直面しなかった、というだけの話である。

色々わかりやすく書いてあるサイト。
http://journal.mycom.co.jp/column/sopinion/231/index.html
http://www-06.ibm.com/jp/domino04/pc/support/Sylphd07.nsf/jtechinfo/SYJ0-03C7574
http://support.intel.co.jp/jp/support/motherboards/desktop/4gb_memory_issue.htm
http://d.hatena.ne.jp/thk/20070307

http://vistafaq.stdo.net/content/2/20/ja/bcdeditのae%BD%BF用方法.html

——-追記——–
x86は32bitであり、このときのメモリ容量は最大で4GB(2の32乗)までです。
32bit OSでメモリを4GB搭載した場合、PCIデバイス等のI/O予約領域に喰われて3GB ちょっとしか認識されない。