64ビットオペレーティングシステムで32ビットプロセスがアクセスできるメモリはどれくらいですか?


86

Windowsでは、通常の状況では、32ビットプロセスは2GBのRAM(またはboot.iniファイルの特別なスイッチを使用して3GB)にしかアクセスできません。64ビットオペレーティングシステムで32ビットプロセスを実行する場合、使用可能なメモリはどれくらいですか?これを変更できる特別なスイッチや設定はありますか?


回答:


92

デフォルトでは2GB。アプリケーションが大規模なアドレス空間を認識している場合(/ LARGEADDRESSAWAREにリンクされている場合)、4 GBを取得します(3 GBではありません。http://msdn.microsoft.com/en-us/library/aa366778.aspxを参照してください)。

多くのアプリケーションはポインタのトップビットがゼロであることに依存しているため、これらはまだ2GBに制限されています。


5
プロセスが4GB全体にアクセスできない理由を誰かが説明できますか?
blueTrin 2013年

1
どういう意味ですか?自分でビルドする場合は、/ LARGEADDRESSAWAREフラグを使用して、4GBで動作させることができます。そうでない場合は、作成した開発者に翻弄されます。
SilverbackNet 2013

ポインタが2の補数で危険に解釈される可能性があるためですか?
rosstex 2015年

1
これsince many application depends on the top bit of pointers to be zeroは、プロセスのアドレス空間をトラバースするときに、アドレス指定スキームの32番目のビットが考慮または使用されないことを意味します。
RBT 2016

21

/ LARGEADDRESSAWAREとリンクする場合、4GBからシステムで使用されているものを差し引いたもの。

もちろん、そのフラグを設定する場合は、ポインタ演算にさらに注意する必要があります。


-1:システムはそれ自体に64ビットアドレスを使用するため、何かを減算する必要はありません
Thomas Weller

@ThomasW。、少なくともWindowsではそうではありません。WOW64でも、64ビットシステムコールには32ビットサンクが必要です。msdn.microsoft.com/en-us/library/windows/desktop/…を
MSN

1
605 kBのDLLを意味しますか?申し訳ありませんが、質問はメモリのGBに関するものだったため、わかりませんでした。
トーマスウェラー

7
@ThomasW。、だから私は「システムで使用されているものを差し引いて」と言ったのです。
MSN

これでFYIリンクが死んだ
jjxtra

14

さまざまな32ビットアプリケーションがある場合、wow64サブシステムはそれらを4Gを超えるメモリ内のどこにでもマップできるため、十分なメモリを備えた64ビットウィンドウでは、さらに多くの32ビットアプリケーションを実行できるという事実に誰も触れていないようです。ネイティブ32ビットシステムよりも。


7
OPが仮想メモリについて話している物理RAMについて話している。32ビットシステムでも、ページファイルが十分に大きい限り、多くのアプリケーションを実行できます。
トーマスウェラー

8

32ビットプロセスは、64ビットOSの同じ制約に制限されます。問題は、メモリポインタの幅が32ビットしかないため、プログラムが32ビットを超えるメモリアドレスを割り当て/解決できないことです。


4
これは、32ビットが4GBのスペースをアドレス指定することを明確にした場合に役立ちます。
エンジニア

4

64ビットOSでの単一の32ビットプロセスは2Gbに制限されています。ただし、IMAGE_FILE_LARGE_ADDRESS_AWAREビットが設定されたEXEファイルにコンパイルされた場合、2Gbではなく4GBの制限があります。https: //msdn.microsoft.com/en-us/library/aa366778(VS.85).aspxを参照してください。

特別なブートフラグ、3 GB、/3GBスイッチ、または/uservaすべて32ビットオペレーティングシステムについて耳にすることは、64ビットWindowsには適用されません。

詳細については、https://msdn.microsoft.com/en-us/library/aa366778(v = vs.85).aspxを参照してください。

32ビットオペレーティングシステムについては、その考えに反して、32ビットオペレーティングシステムの物理的な制限は4GBではありません。たとえば、Microsoft Windows Server 200832ビットなどの32ビットサーバーオペレーティングシステムは、最大64GBにアクセスできます。(Windows Server 2008 EnterpriseおよびDatacenterエディション)–Pentium ProでIntelによって最初に導入され、後にAthlonプロセッサでAMDによって導入されたPhysical Address Extension(PAE)によって、3つのレベルのページテーブル階層を定義します。 32ビットではなく64ビットのテーブルエントリを使用して、これらのCPUが4ギガバイトを超える物理アドレス空間に直接アクセスできるようにします。したがって、理論的には、32ビットOSは理論上2 ^ 64バイト、つまり17,179,869,184ギガバイトにアクセスできますが、セグメントは4GBに制限されています。ただし、マーケティング上の理由により、Microsoftは、サーバー以外のオペレーティングシステムでアクセス可能な最大メモリをわずか4 GB、さらには3GBに制限しています。したがって、単一のプロセスが32ビットOSで4GB以上にアクセスできます。たとえば、MicrosoftSQLサーバーがその一例です。

64ビットWindowsでの32ビットプロセスには、共有カーネルの仮想アドレス空間(システム空間とも呼ばれます)を使用する点で、64ビットプロセスと比較して不利な点はありません。64ビットWindowsでは、64ビットまたは32ビットを問わず、すべてのプロセスが同じ64ビットシステムスペースを共有します。

事実を考えると、システムのスペースは、すべてのプロセス間で共有されている上、32ビットWindows、(スレッド、セマフォ、ファイルなどのように)ハンドルを大量に作成するプロセスのカーネルオブジェクトによって、システムの容量を消費しても、メモリが不足することができますが合計で使用可能なメモリがたくさんある場合。対照的に、64ビットWindowsでは、カーネルスペースは64ビットであり、4GBに制限されません。32ビットアプリケーションによって行われたすべてのシステムコールは、ユーザーモードでネイティブ64ビット呼び出しに変換されます


1
この質問は、単一のプロセスがアクセスできるメモリの量について尋ねています。これは、32ビットの仮想メモリアドレス空間によって制限されます。確かに、PAEを使用する32ビットOSの場合でも、同じコンピューター上でそれぞれ4GBを使用する複数の32ビットプロセスを持つことができます。しかし、それはこの質問が求めているものではありません。
Peter Cordes 2017

@ PeterCordes-申し訳ありませんが、ありがとうございます-2GB / 4GBの制限に関する回答を更新しました。
Maxim Masiutin 2017

@PeterCordes、ご意見ありがとうございます。PAEを使用する32ビットOSでも、複数の32ビットプロセスが同じコンピューターでそれぞれ4GBを使用できること、および64ビット未満の32ビットプロセスを強調するように返信を更新しました。ビットOSは、32ビットOSで問題となっていた2GBのシステムスペース制限の影響を受けません。
マキシムマシウティン

-1

Win64で32ビットプロセスを実行する場合も、同じ基本的な制限があります。アプリは32で実行されますが、Win32のように見えるように最善を尽くすサブシステムであり、これにはプロセスのメモリ制限が含まれます(下位2GB、OS上位2GB)


-11

制限は2gまたは3gbではなく、32ビットの場合は4gbです。

人々がその3GBを考える理由は、実際に4GBのシステムRAMがある場合にOSが3GBを無料で表示するためです。

その合計RAMは4GBです。したがって、32ビットOSで表示されるRAMの合計の一部としてカウントされる1GBのビデオカードがある場合。

4Gig not 3 not 2 got it?


2
それは正しくありません。標準のx86システム(メモリ拡張なし)の場合、カーネルは4GiBのメモリスペース全体にアクセスできます(ページングのためにコンピュータにRAMが1GiBしかない場合でも)。カーネルは、上位2GiBを予約します(一部のカーネルは、代わりに1GiBまたは3GiBを予約します)。各プロセスの仮想メモリにはカーネルの予約済みメモリもマップされているため、プロセスは2GiBのメモリを使用できません。
Alex Jorgenson 2013

3
また、ビデオカードは、プロセスが使用できるメモリの量とは関係ありません。ACPIテーブル、メモリマップドIOなどは物理メモリアドレスを使い果たしますが、仮想メモリのおかげでそれは回避されます。
Alex Jorgenson 2013

1
これは正しくありません。Microsoftは、仮想32ビットアドレス空間をWindows NTで分割することを選択し(設計上の選択)、OS(ドライバー/ API /システムコールなど)のマッピング用に2GBを予約し、アプリ用に残りの2GBを予約しました。/ 3GBブートスイッチはこの動作を変更します(OSマッピング用に1GB、アプリコード用に3GB)。読者のための演習として、古いWindows
NT3.x
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.