2017-08-22 8 views
0

私は32ビットのコードを持っています。しかし、私は私のC + +コードをコンパイルしているときに2GB以上のメモリをとっています。 32ビットシステムについての私の理解によると、プロセスは2 GB以上は使用できません。
どのような提案を私はこれを達成することができますか?私はこれに多くの投稿を見つけましたが、
はスワップを追加しているので役に立ちません。しかし私はすでに8 GBのRAMを持っています。だから私の問題は利用可能なメモリではなく、2GBを超えることができないプロセスをコンパイルするサイズです。仮想メモリが使い果たされました:8 GB RAMのメモリを割り当てることができません

私は8 GBのRAMを持っていますが、私はスワップを追加しようとしましたが、それも動作していません。

+0

各プロセスで使用できる仮想アドレス空間はわずか2ギガバイトです。他の2つのギグは、オペレーティングシステムが使用するために予約されています。あなたがGoogleのためにそれを3ギグにする方法があります。どのくらいの量のラムやスワップがコンピュータにあるかは関係ありません。さらに、64ビットOSをインストールして、それ以上は心配しないでください。 – xaxxon

+0

「コンパイルプロセスのサイズ」とは何ですか?実際にあなたの質問は何ですか?何を達成するための提案?コードを貼り付けることなく、プログラムのスペース効率を向上させる方法を尋ねていますか?または、32ビットから64ビットに切り替える方法を尋ねていますか? * 32ビットシステムについての私の理解によれば、プロセスは2 GB以上かかることはありません* - そうです、あなたのプログラムのユーザに '/ 3TB'を使ってウィンドウを起動させたくない場合、この理解は多かれ少なかれ正しいです。パラメータ。 – Groo

+0

32ビットOSとコンパイラを削除します。 –

答えて

2

Windows 32ビットでは、最大RAM容量は4 GBです。デフォルトでは、このアドレス空間はカーネルメモリとプロセスメモリに分離されていて、どちらも2 GBです。ほとんどのプログラムは2GB以上のメモリを必要としませんが、そうした場合は、/ 3GBスイッチを指定することでプロセスメモリを大きくすることができます。詳細については、こちらをお読み

https://msdn.microsoft.com/en-us/library/windows/hardware/ff556232(v=vs.85).aspx

編集:あなたは、この追加メモリを利用したい場合、あなたはまた、/ LARGEADDRESSAWAREスイッチを使用してプログラムをコンパイルする必要があることに留意してください。これにより、プログラムのプロセス環境ブロックにフラグが設定され、プログラムが2 GB以上のメモリを必要とすることがWindowsに認識されます。

0

あなたが8GBのRAMを持っていると述べたので、あなたのOSとCPUは実際には64ビットであると推測しています。そこで、32ビットプログラムを64ビットOS上で2GB以上の仮想アドレス空間にアクセスさせる、つまりWOW64で動作させる方法を尋ねています。

この場合、Visual Studioで/LARGEADDRESSAWARE linker optionを使用すると、アプリケーションに4GBの仮想アドレススペースunder WOW64が与えられます。特定のフラグでOSを起動させない限り、32ビットWindowsでは何のメリットも見られません。

あなたのアプリは実際には2GB以上のRAMを必要としないと信じていますが、詳細を知らなくてもそれを伝えることは不可能です。

いずれの場合でも、正しい答えは次のとおりです。64ビットアプリケーションに切り替えると、8TBの仮想アドレス空間が得られます。それは8テラバイトです。

関連する問題