質問

64 ビット Windows OS では、利用可能なユーザー仮想アドレス空間は 8 テラバイトであることがわかりました。しかし、これで実行しているプログラムが 32 ビット互換モードで実行されている場合、これだけのユーザー空間がまだ利用可能でしょうか?それとも通常の 32 ビット OS のように動作し、ユーザー アドレス空間は 2GB しか与えられないのでしょうか?

役に立ちましたか?

解決

Microsoft には、さまざまな制限を示す表があります。 Windows リリースのメモリ制限

ユーザーモードの仮想アドレス空間だけを要約すると、次のようになります。

  • 32 ビット Windows:
    • 32ビットプロセス:デフォルトでは 2 GB。3GB /LARGEADDRESSAWARE:YES そして4GT
  • 64 ビット Windows (x64 アーキテクチャ):
    • 32ビットプロセス:デフォルトでは 2 GB。4GB /LARGEADDRESSAWARE:YES
    • 64ビットプロセス:デフォルトでは 8 TB。2GB /LARGEADDRESSAWARE:NO

4GT は 4 ギガバイトのチューニングです。

  • XP: /3GB boot.ini スイッチ
  • ビスタ: bcdedit /set increaseuserva 3072

Mark Russinovich は、こ​​れらの制限の多くを説明するブログ投稿を作成しました。 Windows の限界を押し上げる:仮想メモリ

他のヒント

それは32ビットプロセスとして実行されている場合、

あなたのプロセスは、4ギガバイトの仮想アドレス空間が表示されます。これは、アドレス上位何もすることはできません。

私のオリジナルの答えはかなり悪かったです。ここでJaredParはかなりよく言っていたかを説明リンクがある。

http://msdn.microsoft.com/en-us/library /ms189334.aspxする

ハードウェアに関する限り、互換モードで実行している場合 (つまり、IA32_EFER.LMA が設定され、CS のセグメント記述子で L ビットがクリアされている場合、セグメントは 32 ビット セグメントのように動作します。あれは:

  • セグメントベースは 32 ビットに制限されています。
  • セグメント制限も 32 ビットに制限されます (G ビットを使用)。

これにより、実質的に仮想アドレスが 4 GB に制限されます。OS がさまざまなモードで仮想メモリをどのように分割するのかよくわかりませんが、 これ はハードウェアの制限です。(ごめん...私はハードウェアの専門家であり、OS の専門家ではありません)

プログラムが Wow64 サブシステム上で 32 ビット プロセスとして実行されている場合、実際の 32 ビット OS 上で認識されるのとまったく同じアドレス空間が認識されます。特別なオプションを使用しない場合、32 ビット プロセスでは 2 GB のメモリが利用可能になります。

唯一の違いは、使用できるメモリです。 LargeAddressAware オプション。通常の 32 ビット プロセスでは、これにより 3 GB のアドレス指定可能なメモリが可能になります。Wow64 プロセスでは、最大 4GB を認識できます (ソース)

64ビットマシン/ OSでIIS 6.0以降で32ビットのプロセスを実行しているプロセスは、4GBのメモリまで対処することができることに留意されたい。

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