x64 アプリケーションがあります。これは少し重いアプリケーションです (スレッド数、必要なメモリなどの点で)。このアプリケーションは、4GB RAM 64 ビット Windows7 クアッド コア マシンで実行しています。しかし、アプリケーションが約 2.2 ~ 2.3 GB の RAM を使用した後、クラッシュすることに気付きました。これは必須の行動ですか?最大で 64 ビット アプリケーションは、4GB RAM から 2.3 ~ 2.4 GB RAM しか使用できませんか?
3 に答える
いいえ、最初にオーバーフローやその他のバグがないことを確認してください。32 ビット アプリケーションでもアドレス指定できます。より多くの RAM を使用するため、Windows 64 ビットで制限されているとしたらばかげています。
残りのメモリは自由に使用できますよね?
RAM の量は関係ありません。プロセスが仮想メモリを割り当てます。64 ビット プロセスで割り当てることができる仮想メモリの量は、仮想メモリを RAM にマップするページを提供するオペレーティング システムの機能によってのみ制限されます。CreateFileMapping() を使用して独自のマッピングを作成していないと仮定すると、これは通常、許可されている最大のページング ファイルによってのみ制限されます。システム設定、コントロール パネル + システム + 詳細設定です。Windows エディションにも上限があり、Windows 7 Home Premium では 16 ギガバイト、Professional 以上では 192 ギガバイトです。
RAM は、プログラムが実際に仮想メモリにアクセスするときにのみ使用されます。これは、メモリがまだマップされていないときにページ フォールトを生成します。64 ビット プロセスは、使用可能なすべてのページを消費するかなり前に、RAM の量を大幅に超えてメモリを割り当てて使用すると、通常、これらのページ フォールトが原因で速度が低下します。
あなたは典型的な最大ページングファイルサイズのかなり南にいるので、これは確かに単なる古いヒープ破損バグです.
プログラムをデバッグします。大量のメモリを割り当てたからといって、クラッシュが発生することは想定されていません。通常の容疑者:数学のオーバーフロー、メモリの破損、メモリ割り当てルーチンからのエラーの処理の失敗。