web-dev-qa-db-ja.com

Windows上の1つのプロセスが対応できるメモリの最大量

Windowsリリースのメモリ制限 Windows上の単一プロセスが対応できるメモリの最大量を答えます:

32ビットバージョンのWindowsでは、1つのプロセスで一度に3GBを超える仮想メモリをマップしてアドレス指定することはできません。 64ビットバージョンのWindowsでは、32ビットプロセスは一度に4GBを超える仮想メモリをマップしてアドレス指定することはできません。

64ビットプロセスの場合、すべての種類の要因に応じて適用できる重複する制限が多数存在するため、量を計算するのは困難です。通常は約7TBです。

私の質問:「3GB」、「4GB」などの値を確認する方法は?

C#コードを書いてそれを証明できますか?方法はありますか?

ありがとう。

29
user1108948

Mark Russinovichは、Windowsメモリリソースに関するマルチパートシリーズを公開し、これを非常によくカバーしています。ここにあります: http://blogs.technet.com/b/markrussinovich/archive/2008/07/21/3092070.aspx

彼は、限界がそれらである理由とテストをカバーします。テスト用のコードは、どこかでチューブの中に浮かんでいます。

メモリリソースと、さまざまなタイプのリークで確認できる問題について知りたい場合は、お読みください。

しかし、一言で言えば、32ビットOSの32ビット:2 GB、大規模なアドレス空間を認識するように設定されていない限り、その場合は3 GB。 64ビットOSの32ビット:2 GB、大規模なアドレススペース対応に設定されている場合を除き、その場合は4 GB。

64ビットプロセス:2 GB、大規模なアドレススペース対応に設定されていない限り、7 TBに制限されているIntel Itaniumベースのシステムでホストされていない限り、最大8 TBに対応できます。

Microsoftは、さまざまな制限を(フレーバーとタイプごとに)次のように述べています: http://msdn.Microsoft.com/en-us/library/aa366778.aspx

32
StarPilot

これをテストするために、コンソールアプリで何らかのループを作成できます。

正確に1MBの文字列を作成し、連結プロセスをループして、...スタックオーバーフローエラーが発生するまでサイズを増やします。

反復ごとに、WriteLineのサイズまたは反復回数。

[〜#〜] edit [〜#〜]

STRINGは不変なので(技術的にが参照型であるにもかかわらず)OBJECTを使用するために追加します

編集2

Trispedは、Objectで囲まれた文字列はまだ不変であることを指摘しています。

バイト配列[1024]を作成することでうまくいくはずです。

1
Wesley