파일이 너무 커서 메모리 매핑하기에 너무 큰 시간마다 제안 된 바이트 수는 얼마입니까?

StackOverflow https://stackoverflow.com/questions/1031073

  •  06-07-2019
  •  | 
  •  

문제

메모리 맵을 사용하여 파일을 열고 있습니다. 파일은 너무 큰 것으로 보입니다 (32 비트 PC에서 6GB)가 한 번에 맵핑 될 수 없습니다. 그래서 나는 매번 그 부분을 매핑하고 다음 매핑에서 오프셋을 조정할 생각입니다.

각 매핑에 대한 최적의 바이트가 있습니까? 아니면 그러한 그림을 결정할 수있는 방법이 있습니까?

감사.

도움이 되었습니까?

해결책

최적의 크기는 없습니다. 32 비트 프로세스를 사용하면 총 4GB의 주소 공간이 있으며 일반적으로 사용자 모드 프로세스에는 2GB 만 사용할 수 있습니다. 그런 다음이 2GB는 EXE 및 DLL의 코드 및 데이터, 힙 할당, 스레드 스택 등의 데이터에 의해 조각화됩니다. 이를 감안할 때 파일을 메모리에 매핑 할 수있는 1GB 이상의 연속 공간을 찾지 못할 것입니다.

최적의 숫자는 앱에 따라 다르지만 512MB 이상의 MB를 32 비트 프로세스에 매핑하는 것이 우려됩니다. 자신을 512MB로 제한하더라도 응용 프로그램에 따라 몇 가지 문제가 발생할 수 있습니다. 또는 64 비트로 갈 수 있다면 파일의 여러 기가 바이트를 메모리에 매핑하는 데 문제가 없어야합니다. 주소 공간이 너무 커서 문제가 발생하지 않아야합니다.

VirtualQuery와 같은 API를 사용하여 가장 큰 연속 공간을 찾을 수 있지만 많은 양의 주소 공간을 제거 할 때 실제로 메모리 오류가 발생하도록 강요합니다.

편집 : 방금 내 대답이 Windows 특정임을 깨달았지만 어떤 플랫폼에 대해 논의하지 않았습니다. 다른 플랫폼에는 메모리 매핑 된 파일에 대해 유사한 제한 요소가 있다고 가정합니다.

다른 팁

파일이 메모리 매핑되어야합니까?

733MHz PIII에서 8GB 비디오 파일을 편집했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top