650 만 개가 넘는 요소 (ints)를 stl 세트에 조금 삽입하려고합니다. 여기에 코드입니다 :STL 세트에 600 만 개의 요소를 삽입 할 수없는 이유는 무엇입니까?
set<int> s;
cout << s.max_size() << endl;
for(int i = 0; i < T.MULT * T.MAXP; i++) {
s.insert(a[i]);
}
T.MULT
이 10
됩니다; T.MAXP
은 666013
입니다.
a
은 별개의 요소가 포함 된 - (int a[T.MULT * T.MAXP];
) - 정적으로 할당 된 배열입니다.
약 4,600 만 개가 넘으면 s.insert()
은 bad_alloc
예외를 던집니다. Windows 7에서 사용할 수있는 리소스 모니터에 3GB의 사용 가능한 메모리가 남아 있다고 표시됩니다. 내가 뭘 잘못하고 있니? 왜 STL이 메모리를 할당 할 수 없습니까?
편집 : 여기에 전체 코드입니다 : http://ideone.com/rdrEnt
Edit2가 : 분명히 삽입 된 요소는 결국 구별되지 않을 수도 있습니다,하지만 그건 문제가되지 않습니다.
EDIT3 : 여기에 코드의 단순화 된 버전입니다 : 내가 직접 귀하의 질문에 대답 할 수는 없지만 http://ideone.com/dTp0fZ
작업 관리자가 프로세스의 작업 집합에 대해보고하는 것은 무엇입니까? 코드가 32 비트 또는 64 비트 코드로 컴파일되고 있습니까? –
대부분 가상 메모리가 부족합니다. 어떤 플랫폼입니까? –
'a'가 무엇인지 보여주십시오. –