2017-04-17 7 views

답변

0

이 경우 가장 흥미로운 점은 어제 작업이 정상입니다.

std::vector의 내용물은 공기 중에 저장되지 않습니다. 컴퓨터의 메모리를 차지합니다. 분명히 컴퓨터의 메모리 상황이 항상 바뀝니다. 어제부터 사용 가능한 총 여유 공간이 줄어들거나 더 많은 분열이 발생하여 총 여유 공간이 470MB를 훨씬 초과하는 경우에도 연속 470MB 지점이없는 경우도 있습니다.

아마도 std::deque 단기간 우아 정도 문제 해결 수

std::vector 반대로

하기, 양단의 요소가 연속적 저장되지 않는다 : 전형적인 구현 개별적 시퀀스를 사용하는 고정으로 할당 - 크기 배열, [...]

동일한 문서에 설명되어 있듯이 몇 가지 단점이 있습니다.

+0

답장을 보내 주셔서 감사합니다. 하지만 벡터 데이터를 RAM에 저장했다고 생각하지 않습니까? – qqffx

+1

@qqffx : 음, "RAM"의 "M"은 "메모리"를 의미합니다 :) 그래서 나는 당신의 대답을 이해하지 못한다는 것을 알고 있습니다. –

+0

모호한 것에 대해 미안 해요 :) 16GB RAM에 480MB의 연속 메모리가 있습니까? 30 %로드 됨 (작업 관리자 기준) 의미 – qqffx

1

벡터가 필요한 크기의 연속 메모리 블록을 할당하려고 문제의 원인을 모른다. 시스템 메모리 조각화에 따라 사용 가능한 0.5Gb 블록이 없을 수 있으며 메모리 할당이 실패합니다.

0

할당량이 많은 인접 메모리이므로 할당량이 부족하여 bad_alloc이 발생합니다.

+0

여기에서 '예약'할 수있는 것은 무엇입니까? –

+0

동의, 쓸데없는 – Gabriel