31

Windowsリリースのメモリ制限は、Windows上の単一のプロセスが対処できるメモリの最大量に答えます。

32ビットバージョンのWindowsでは、1つのプロセスで一度に3GB以下の仮想メモリをマップおよびアドレス指定できます。64ビットバージョンのWindowsでは、32ビットプロセスは一度に4GB以下の仮想メモリをマップおよびアドレス指定できます。

64ビットプロセスの場合、あらゆる種類の要因に応じて適用される可能性のある重複する制限が多数あるため、量を計算するのは困難です。通常は約7TBです。

私の質問:「3GB」、「4GB」などの値を確認するにはどうすればよいですか?

それを証明するためにC#プログラムを作成できますか?その方法はありますか?

4

2 に答える 2

35

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

彼は、制限が何であるかという理由と、テストについて説明します。テストのコードは、チューブのどこかに浮かんでいます。

メモリリソースと、さまざまなタイプのリークからわかる問題について知りたい場合は、よく読んでください。

ただし、簡単に言うと、32ビットOSでは32ビット:2 GBです。ただし、大きなアドレススペースを意識するように設定されている場合は、3GBです。64ビットOSで32ビット:2 GB。ただし、ラージアドレススペース対応に設定されている場合は4GB。

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

Microsoftは、さまざまな制限を(フレーバーとタイプごとに) http://msdn.microsoft.com/en-us/library/aa366778.aspxに記載しています。

于 2012-08-09T21:27:12.497 に答える
1

これをテストするために、コンソールアプリである種のループを書くことができます。

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

各反復で、WriteLineのサイズまたは反復回数。

編集

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

2つ編集

Trispedは、オブジェクトでボックス化された文字列は依然として不変であることを指摘しています。

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

于 2012-08-09T20:45:00.333 に答える