Windows Server 2003、Enterprise Edition、SP2 の場合 (/3GB スイッチは無効)
私が理解しているように、間違っているかもしれませんが、1 つのプロセスでアドレス可能な最大メモリは 4GB です。
2 GB のプライベート バイトと 2 GB の仮想バイトですか?
プライベート バイト制限または仮想バイト制限に達すると、「メモリ不足」エラーが発生しますか?
Windows Server 2003、Enterprise Edition、SP2 の場合 (/3GB スイッチは無効)
私が理解しているように、間違っているかもしれませんが、1 つのプロセスでアドレス可能な最大メモリは 4GB です。
2 GB のプライベート バイトと 2 GB の仮想バイトですか?
プライベート バイト制限または仮想バイト制限に達すると、「メモリ不足」エラーが発生しますか?
ある意味で、プロセスの最大アドレス空間が 4GB であることは正しいです。各プロセスのアドレス空間の半分は、オペレーティング システムによって使用されます。これは 3GB スイッチで変更できますが、システムが不安定になる可能性があります。そのため、プロセスが独自に使用するための 2GB のアドレス可能なメモリが残されています。まあ、完全ではありません。このスペースの一部は、DLL や他の一般的なコードなどの他のものによって占められていることがわかります。プログラマが実際に使用できるメモリは、約 1.5GB ~ 1.7GB です。
誤ってこの制限を超えてしまった場合にどのように対処できるかはわかりませんが、この理由で大規模なマルチプレイヤー マップでクラッシュするゲームは知っています。注意すべきもう 1 つの点は、/LARGEADDRESSAWARE:YES リンカ フラグを有効にしない限り、32 ビット プログラムは 64 ビット システムで 2GB を超えるアドレス空間を使用できないことです。
Mark Russinovich は、これに関する一連の投稿を開始しました.. Pushing the Limiting of Windows: Physical Memory
32 ビット クライアント SKU のライセンス制限は 4 GB ですが、実際の制限はそれよりも低く、システムのチップセットと接続されているデバイスによって異なります。その理由は、物理アドレス マップには RAM だけでなくデバイス メモリも含まれ、x86 および x64 システムはすべてのデバイス メモリを 4GB アドレス境界より下にマップして、処理方法がわからない 32 ビット オペレーティング システムとの互換性を維持するためです。 4GB を超えるアドレス。システムに 4GB の RAM と、ビデオ、オーディオ、ネットワーク アダプターなどのデバイスがあり、合計 500MB のデバイス メモリにウィンドウを実装している場合、4GB の RAM のうち 500MB が 4GB のアドレス境界より上に存在します。
32 ビット Windows プラットフォームでは、合計で 2Gb のメモリにのみアクセスできます (3Gb スイッチを使用しない場合)。
64 ビット OS で複数の 32 ビット VM を実行して、マシンに 4Gb を超えるメモリがある場合、各アプリができるだけ多くのメモリにアクセスできるようにすることができます。
多くの人がこれらの障壁にぶつかり始めたばかりです。VM は 64 ビット OS で 32Gb のメモリを喜んで使用するため、アプリが .net または Java にある場合は簡単だと思います。
32 ビットでは、仮想メモリ用に十分な物理メモリとディスク容量がある場合、カーネルが 0xC0000000 より上のアドレス空間をそれ自体に予約するため、メモリは約 3GB 不足します。64 ビット アプリケーションを実行する 64 ビット カーネルでは、制限は 8TB です。
32 ビット マシンの最大アドレス可能なメモリは 4 GB で、64 ビット マシンの場合はさらに多くの負荷に対応できます。(一部の 32 ビット マシンには、さらにアクセスするための拡張システムがありますが、これを気にしたり、使用を検討したりする価値はないと思います)。
仮想制限に達すると、メモリ不足エラーが発生します。Windows Server 2003 では、タスク マネージャの [コミット チャージ制限] というラベルの付いたパフォーマンス タブに制限が表示されます。