2013-05-28 2 views
3

필자는 입력으로 일부 데이터를 취하는 시스템을 구현했으며 결과적으로 파일로 출력되는 매우 큰 vector< vector< vector<int> > >을 생성합니다.벡터 <벡터 < vector<int>>>이 RAM보다 큰 경우 왜 내 프로그램이 올바른 출력을 생성합니까?

그 결과를 계산 한 후, I이 최종 3D 벡터 내부 수치의 합계를 계산하기로 결정하고 있었다 : 1386502951

이 벡터를 저장하기 위해 필요한 메모리의 총량을 의미 적어도 1386502951*4 bytes = 5.16512599 GB

그러나 내 RAM 메모리는 4GB뿐입니다.

누군가가 내게 어떻게 가능한지 설명 할 수 있습니까?

미리 감사드립니다.

+3

가상 메모리/페이징의 마술? –

+4

가상 메모리가 다시 발생합니다. –

+2

어떤 운영 체제입니까? (두 단어로 된 답변은 "가상 메모리"이지만, 그 질문에 대답하면 더 자세히 설명 할 수 있습니다.) – zwol

답변

4

응용 프로그램은 가상 메모리를 지원하므로 컴퓨터에 실제로 설치된 것보다 많은 메모리를 할당 할 수 있습니다. 가상 메모리 할당, 페이징 및 해제는 운영 체제에서 처리하여 응용 프로그램이 실제 메모리를 소모하는 것에 대해 걱정할 필요없이 실행할 수 있도록합니다.

응용 프로그램이 힙에서 메모리를 해제 할 때 즉시 할당 된 메모리를 해제하지 못할 수 있습니다. 이것은 사람들이 자신의 어플리케이션이 때때로 더 많은 메모리를 사용해야한다고 생각하게하는 경향이 있습니다.

가상 및 물리적 주제에 대해 논의하고있는 웹 사이트가 많으며 운영 업체가 제공하는 API를 통해 제어 할 수 있습니다. 빠른 Google Dance는 주제에 대한 많은 링크를 제공해야합니다.

2

이것이 실패하지 않는 여러 가지 이유가있을 수 있습니다.

의견에서 언급했듯이 Windows가 가상 메모리 (RAM이 아닌)에 큰 덩어리를 넣었을 가능성이 가장 높습니다.

또 다른 (일부 상황에서) 옵션 옵티마이 목록을 정리된다는 점이다 (아마도?)

정확히 무슨 일이 일어나고 볼 수있는 가장 좋은 방법은 작업 관리자를 열고 성능 탭으로 전환 보는 것입니다 RAM 모니터에서 사용합니다.

관련 문제