문제

짧은 문제 :

#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 콘솔에서. 그래서 질문은 - 어떻게 가능합니까? 가상 메모리와 관련이 있습니까?

한 프로그램 내에서 하나의 큰 배열을 가상 메모리에 저장할 수 있습니까?

고마워.

도움이 되었습니까?

해결책

예. 운영 체제를 사용하면 프로세스 당 최대 2GB의 RAM을 할당 할 수 있습니다. 두 장의 사본을 시작하면 가상 메모리를 사용 하여이 성장할 수 있습니다. 가상 메모리는 매우 느리게 (하드 드라이브를 사용하고 있기 때문에) 여전히 작동합니다.

다른 팁

예, 가상 메모리입니다. l_size = 1500을 사용하면 첫 번째 인스턴스를 시작할 수 있으며 필요한 메모리를 할당 할 수 있습니다. 두 번째 인스턴스를 시작하면 첫 번째 인스턴스에 의해 할당 된 메모리가 디스크로 가득 차서 두 번째 인스턴스의 RAM에 공간을 만듭니다.

한 번에 할당 할 수있는 RAM의 양과 하나의 프로세스에서 사용 가능한 물리적 RAM 및 가상 메모리의 양 (페이지 파일 크기)뿐만 아니라 메모리 주소의 폭에 따라 다릅니다. 64 비트 기계에서는 32 비트 기계에서 할 수있는 것보다 단일 프로세스에서 훨씬 더 많은 메모리를 할당 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top