2009-10-30 6 views
0

짧은 문제 : (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.

+0

OS가 비활성 메모리 (즉, 선점 형 멀티 태스킹 조건으로 일시 중지 된 앱)를 스왑하고 다른 스택으로 스왑하는 기능과 관련이 있습니다. – Lazarus

+0

이것은 32 비트 OS 또는 64 비트 OS에 있습니까? – sbi

+0

부수적으로 "하나의 큰 배열"은 할당하지 않지만 L_ 크기 + 1 개의 R_ 크기 배열을 할당합니다. 아마도 32 비트 OS의 주소 지정 가능한 메모리 제한에 부딪 힐 수 있습니다. – mch

답변

7

예. 운영 체제를 사용하면 프로세스 당 최대 2GB의 RAM을 할당 할 수 있습니다. 두 개의 복사본을 시작하면 가상 메모리를 사용하여이 복사본을 늘릴 수 있습니다. 하드 드라이브를 사용하기 때문에 매우 느려지지만 여전히 작동합니다.

+0

한 프로그램 내에서 하나의 큰 배열을 다른 가상 메모리에서 작동하는 동안 가상 메모리에 저장할 수 있습니까? – Moomin

+0

32 비트 프로그램은 포인터가 전체 주소를 처리 할만큼 충분한 비트가 없기 때문에 사용할 수있는 총 메모리 양이 제한됩니다. 이것이 바로 64 비트가 인기를 얻는 이유입니다. –

+1

예. 64 비트 시스템에서 첫 번째 테스트 사례 ~가 효과적 일 수 있습니다 (스왑을 충분히 지정했다면) -하지만 속도가 매우 느립니다. 기술적으로는 32 비트 Windows 프로그램에서도 2GB 이상의 용량을 할당 할 수 있지만 상당히 어렵습니다. 호기심이 있다면/3GB 스위치로 검색하십시오. –

1

예, 가상 메모리입니다. L_size = 1500이면 첫 번째 인스턴스를 시작할 수 있으며 필요한 메모리를 할당 할 수 있습니다. 두 번째 인스턴스를 시작하면 첫 번째 인스턴스에서 할당 한 메모리가 디스크로 페이징되어 두 번째 인스턴스의 RAM 공간이 만들어집니다.

한 번에 하나의 프로세스에서 할당 할 수있는 RAM의 양은 사용 가능한 실제 RAM 및 가상 메모리 (페이지 파일 크기)뿐만 아니라 메모리 주소 너비에도 영향을받습니다 . 64 비트 시스템에서는 32 비트 시스템에서 수행 할 수있는 것보다 훨씬 많은 메모리를 단일 프로세스로 할당 할 수 있습니다.