문제
짧은 문제 :
#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 비트 기계에서 할 수있는 것보다 단일 프로세스에서 훨씬 더 많은 메모리를 할당 할 수 있습니다.
제휴하지 않습니다 StackOverflow