2013-03-22 2 views
0

지도 파일을 만드는 프로그램이 있습니다. 그 파일은 m_hMap = CreateFileMapping(m_hFile,0,dwProtect,0,m_dwMapSize,NULL);이라고 할 수 있지만, 후속 함수 호출을 MapViewOfFile(m_hMap,dwViewAccess,0,0,0)으로 호출하면 오류 코드가 나타납니다. ERROR_NOT_ENOUGH_MEMORY 또는 ERROR_NOT_ENOUGH_MEMORY 8 "이 명령을 처리 할 수있는 저장소가 부족합니다."오류 문자열입니다.Visual C++ 6 MFC MapViewOfFile이 오류 코드 8을 반환합니다.

그래서 MapViewOfFile이 나를 위해 무엇을하는지, 상황을 어떻게 해결할 수 있는지 완전히 이해하지 못하고 있습니다.

몇 가지 숫자가 ...

m_dwMapSize = 453427200 
dwProtect = PAGE_READWRITE; 
dwViewAccess = FILE_MAP_ALL_ACCESS; 

이 내 페이지 szie는 65536 2라고 생각합니다^매우 큰 파일의 경우

+0

매핑하려는 파일의 크기는 어느 정도입니까? – Tomdarkness

+0

약 500mb – nagates

+0

파일의 첫 번째 ~ 432MB 만 매핑하려고한다고 가정합니다. 어쨌든, 프로세스에 파일을 매핑하는 데 사용할 수있는 충분한 가상 메모리가 있습니까? 제한은 기본적으로 32 비트 창에서 2GB입니다. – Tomdarkness

답변

0

(16)는 그것을 읽고, 작은에서 그것을 읽을 것을 권장합니다 조각을 만들고 각 조각을 처리하십시오. MapViewOfFile 함수는 메모리에 조각을 매핑하는 데 사용됩니다.

http://msdn.microsoft.com/en-us/library/windows/desktop/aa366761(v=vs.85).aspx은 매우 큰 파일을 조각으로 읽으려는 경우에 대비하여 작업을 제대로 수행하기 위해 오프셋이 필요합니다. 대부분 조각화 및 관련 이유 때문에 매우 큰 메모리 요청이 실패합니다.

+0

그래서 무엇입니까 m_hMap = CreateFileMapping (m_hFile, 0, dwProtect, 0, m_dwMapSize, NULL); 하기? 메모리를 할당하지 않습니까? – nagates

+0

MapViewOfFile이 열려있는 파일의 malloc + memcpy로 상상할 수 있습니다. 더 이상 설명하지 않습니다. (두꺼운면은 역순입니다 : malloc은 슬래브 메모리 매핑을 사용할 수 있습니다). 그래서 MapViewOfFile은 보통 파일 뷰의 바이트를 메모리에 지속적으로 맞출 수있는 주소를 선택합니다. – Saqlain