1

6GB RAM を搭載した Windows 7 X64 でプロセスを実行しています。このプロセスで 2GB 近く以上をコミットしたい場合に問題が発生します。SetProcessWorkingSetSize() を使用したかったのですが、効果がありません。約 2040 MB でまだアクセス違反が発生し、RAM の 30% 以上が空いています。また、最も奇妙なのは、割り当てられたメモリの量がすべての実行で同じであるという事実です。私の質問は、プロセスにこの値以上を使用するにはどうすればよいですか? このプロセスのために RAM を最大限に活用する必要があります。それをテストするために、簡単なコードを書きました。ご覧のとおり、大きな配列を割り当てようとしているわけではなく、while(1) ループの各反復で 640 バイトしか割り当てず、アクセス違反はちょうど 2040MB 前後で発生します。

コード セグメントは次のとおりです。

class Dummy
{
    long double x;
    long double y;
    long double z;
    long double k;
    long double l;
    long double m;
    long double n;
    long double p;
};
int main()
{
    while(1){new Dummy[10];}
}

タスクマネージャーのスクリーンショットは次のとおりです。

タスクマネージャー

4

2 に答える 2

4

プログラムは 32 ビット モードでコンパイルされます。そのため、それだけのメモリしか使用できません。これはアーキテクチャの制限です。

より多くのメモリを使用できるようにする場合は、64 ビット モードでコンパイルする必要があります。

于 2013-07-04T10:33:24.840 に答える
3

または、オプション /LARGEADDRESSAWARE をリンカーに設定すると、プログラムは約 3GB の RAM で利用可能になり、32 ビット システムでも実行できます。

http://msdn.microsoft.com/en-us/library/wz223b1z(v=vs.80).aspx

于 2013-07-04T10:43:24.457 に答える