0

短い問題:

#include <iostream>

using namespace std;

int main()
{
    double **T;
    long int L_size;
    long int R_size = 100000;
    long int i,j;

    cout << "enter L_size:";
    cin >> L_size;
    cin.clear();
    cin.ignore(100,'\n');
    cout << L_size*R_size << endl;
    cout << sizeof(double)*L_size*R_size << endl;

    T = new double *[L_size];
    for (i=0;i<L_size;i++)
    {
        T[i] = new double[R_size];
    }

    cout << "press enter to fill array" << endl;
    getchar();
    for (i=0;i<L_size;i++)
    {
        for (j=0;j<R_size;j++)
        {
            T[i][j] = 10.0;
        }
    }
    cout << "allocated" << endl;


    for (i=0;i<L_size;i++)
    {
        delete[] T[i];
    }
    delete [] T;
    cout << "press enter to close" << endl;
    getchar();
    return 0;
}

2GB の RAM (32 ビット OS 上) では動作させることができませんL_size = 3000。2.4GB。

しかし、上記のプログラムの 2 つのコピーをそれぞれ起動するとL_size = 1500、動作が非常に遅くなりますが、最終的に両方ともallocatedコンソールに戻ります。問題は、それがどのように可能かということです。仮想メモリに関連していますか?

1 つのプログラム内で、別の操作中に 1 つの大きな配列を仮想メモリに格納することは可能ですか?

どうも。

4

2 に答える 2

7

はい。オペレーティング システムでは、プロセスごとに最大 2GB の RAM を割り当てることができます。2 つのコピーを開始すると、仮想メモリを使用してこれが大きくなりますが、(ハード ドライブを使用しているため) 非常に遅くなりますが、それでも機能します。

于 2009-10-30T16:41:13.147 に答える
1

はい、仮想メモリです。L_size = 1500 で、最初のインスタンスを開始でき、必要なメモリを割り当てることができます。2 番目のインスタンスを開始すると、最初のインスタンスによって割り当てられたメモリがディスクにページアウトされ、RAM に 2 番目のインスタンス用のスペースが確保されます。

1 つのプロセスで一度に割り当てることができる RAM の量は、使用可能な物理 RAM と仮想メモリ (ページ ファイルのサイズ) の量だけでなく、メモリ アドレスの幅にも依存します。64 ビット マシンでは、32 ビット マシンよりも多くのメモリを 1 つのプロセスに割り当てることができます。

于 2009-10-30T16:44:50.567 に答える