2011-03-24 3 views
2

로 볼 수 있습니다 :C++ 프로그램이 충돌 "무료"메모리가 제로하지만 대기 메모리는 내가 약간의 문제가 여전히

내가 (FREAD와) 구조체에 데이터의 260메가바이트 주위에로드해야합니다. 윈도우 자원 관리는 내가 가진 것을 저에게 말한다 : 사용

  • 2,346메가바이트 메모리
  • 무료 대기
  • 2백48메가바이트 메모리에
  • 1,478메가바이트 메모리 그러나

, 내 프로그램을 실행하고 데이터를로드 할 때 "더 이상"여유 메모리가 남아 있지 않은 시점에서 프로그램이 충돌합니다. 여전히 약 1200MB의 대기 메모리가 남아 있습니다.

무료 mem이 비어 있으면 자동으로 대기 메모리를 디스크로 교체하고 더 많은 메모리를 확보 할 수있을 것이라고 생각 했습니까?

이 문제를 방지 할 수있는 방법이 있습니까? 아니면 잘못된 것을하고 있습니까?

+0

32 비트 프로그램입니까? 그렇다면 실제 메모리 또는 스왑 공간의 양에 상관없이 2-3GB의 가상 주소 공간 만 확보하십시오. –

+0

메모리를 할당하는 코드를 업데이트 할 수 있습니까? 모든 Windows 32 비트 프로세스는 자체 4GB 가상 메모리 공간 (시스템에 대해 1 ~ 2GB 예약되어 있음)이 있으므로 Windows Resource-Management의 메모리 사용은 별 문제가되지 않습니다. – young

답변

5

메모리가 사용 가능하다고해서 그것이 연속적이라는 것을 의미하지는 않습니다. 당신이 그런 큰 덩어리를 요구할 때, 사용 가능한 메모리가 조각화되어 있기 때문에 그것을 얻지 못할 것입니다.

+0

이 좋습니다. 그 생각을 했어야 했어. 감사 – clasnes

+0

연속 메모리는 DMA 버퍼에서만 중요합니다. 반면에 인접한 주소 공간 ... –

1

실제 메모리가 아닌 가상 주소 공간이 고갈되었습니다. 추측 하듯이 실제 메모리는 디스크 캐시를 축소 한 다음 스왑 파일을 사용하여 증가 될 것입니다. 그러나 가상 주소 공간은 엄격한 제한 사항입니다.

+0

downvote 이유는 무엇입니까? –

0
  1. 시스템 등록 정보에서 가상 메모리 페이지 파일 크기를 변경하십시오.
  2. 프로그램 시작시 필요한 메모리를 모두 할당하십시오. (메모리 풀 개념)
  3. 시스템을 다시 시작한 후 다시 시도하십시오.
관련 문제