質問

Windows Server 2003、Enterprise Edition、SP2の下(/ 3GBスイッチは無効)

それを理解し、間違っているかもしれませんが、プロセスの最大アドレス可能メモリは4GBです。

2GBのプライベートバイトと2GBの仮想バイトですか?

「メモリ不足」が発生しましたか?プライベートバイト制限または仮想バイト制限に達したときのエラー?

役に立ちましたか?

解決

ある意味で、プロセスの最大アドレス空間は4GBです。アドレス空間の半分は、プロセスごとにオペレーティングシステムによって占有されます。これは3GBスイッチで変更できますが、システムが不安定になる可能性があります。そのため、プロセスが単独で使用するための2GBのアドレス可能なメモリが残っています。まあ、完全ではありません。このスペースの一部は、DLLや他の一般的なコードなどの他の要素によって占有されていることがわかります。プログラマーとして実際に使用できるメモリは、約1.5GB〜1.7GBです。

この制限を誤って超えて処理する方法についてはわかりませんが、この理由で大きなマルチプレイヤーマップでクラッシュするゲームを知っています。もう1つ注意すべき点は、32ビットプログラムは/ LARGEADDRESSAWARE:YESリンカーフラグを有効にしない限り、64ビットシステムで2 GBを超えるアドレス空間を使用できないことです。

他のヒント

次のリンクでは、これまで説明してきたよりもはるかに優れた説明を提供しています。

MSDN-CLR Inside Out:メモリ問題の調査

Mark Russinovichは、これに関する一連の投稿を開始しました。 Windowsの限界に挑戦:物理メモリ

4GBは32ビットクライアントSKUのライセンス制限ですが、実際の制限は低く、システムのチップセットと接続デバイスに依存します。その理由は、物理アドレスマップにはRAMだけでなくデバイスメモリも含まれており、x86およびx64システムは4GBアドレス境界より下のすべてのデバイスメモリをマップして、処理方法がわからない32ビットオペレーティングシステムとの互換性を維持するためです4GBを超えるアドレス。システムに4GB RAMがあり、ビデオ、オーディオ、ネットワークアダプターなど、デバイスメモリに合計500MBのウィンドウを実装するデバイスがある場合、4MBのRAMのうち500MBが4GBアドレス境界の上に存在します。

32ビットWindowsプラットフォームでは、合計で2Gbのメモリにしかアクセスできません(3Gbスイッチなし)。

64ビットOS上で複数の32ビットVMを実行して、マシンが4Gbを超える場合に各アプリができるだけ多くのメモリにアクセスできるようにすることができます。

多くの人がこれらの障壁に突き当たり始めたばかりです。VMが64ビットOSで32Gbのメモリに達すると、アプリが.netまたはJavaにある方が簡単だと思います。

32ビットでは、仮想メモリに十分な物理メモリとディスクスペースがある場合、カーネルは0xC0000000を超えるアドレススペースを自身で予約するため、メモリは約3GBになります。 64ビットアプリケーションを実行する64ビットカーネルでは、制限は8TBです。

詳細については、 MSDN-Windowsリリースのメモリ制限

32ビットマシンの最大アドレス可能メモリは4GBです。64ビットマシンの場合、より多くのアドレスを指定できます。 (一部の32ビットマシンには、さらにアクセスするための拡張システムがありますが、これを使用することを検討したり検討したりする価値はないと思います)。

仮想制限に達すると、メモリ不足エラーが発生します。 Windows Server 2003では、タスクマネージャーは「Commit Charge Limit」というラベルの付いたパフォーマンスタブで制限を通知します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top