짧은 문제 : (32 비트 OS)에 2GB의 RAM과큰 동적 배열 ++
#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;
}
나는 그것이 약 필요가 꽤 분명하다 L_size = 3000
와 함께 작동 할 수 없습니다. 2.4GB.
그러나 위의 프로그램을 두 개 복사하면 각각 L_size = 1500
이됩니다. 실제로는 느리지 만 마침내 둘 다 콘솔에 allocated
을 반환합니다. 질문은 - 어떻게 가능합니까? 가상 메모리와 관련이 있습니까?
하나의 큰 배열을 다른 프로그램에서 작동하는 동안 가상 메모리에 저장할 수 있습니까?
Thx.
OS가 비활성 메모리 (즉, 선점 형 멀티 태스킹 조건으로 일시 중지 된 앱)를 스왑하고 다른 스택으로 스왑하는 기능과 관련이 있습니다. – Lazarus
이것은 32 비트 OS 또는 64 비트 OS에 있습니까? – sbi
부수적으로 "하나의 큰 배열"은 할당하지 않지만 L_ 크기 + 1 개의 R_ 크기 배열을 할당합니다. 아마도 32 비트 OS의 주소 지정 가능한 메모리 제한에 부딪 힐 수 있습니다. – mch