메모리 매핑 파일의 크기를 제한하는 것은 무엇입니까? 할당되지 않은 주소 공간의 최대 연속 덩어리보다 클 수는 없으며 충분한 여유 디스크 공간이 있어야한다는 것을 알고 있습니다. 그러나 다른 한계가 있습니까?메모리 매핑 파일의 크기는 어느 정도입니까?
답변
너무 보수적입니다. 메모리 매핑 파일은 주소 공간보다 클 수 있습니다. 보기의 메모리 매핑 된 파일은 OS 메모리 제약 조건에 의해 제한을 받지만 한 번에보고있는 파일의 일부일뿐입니다. (기술적으로는 파일의 불연속 부분에 대한 여러 뷰를 한 번에 매핑 할 수 있으므로 오버 헤드와 페이지 길이 제약을 제외하고보고있는 총 바이트 수는 제한되어 있습니다. 바이트 수를 볼 수 있습니다 [1024에 0] 바이트 두 개의 전경 [2 40 40 1,024 + 2]).
MS Windows에서 MapViewOfFile 기능 본다. 그것은 효과적으로 64 비트 파일 오프셋과 32 비트 길이를 취합니다.
리눅스에서 FUSE을 사용하면 필요할 때 디스크로 확장되는 메모리 내장 파일 시스템을 만들 수 있습니다. 나는 그것이 맵핑 된 메모리로서 자격이 있는지 확신하지 못한다. 그리고 구별은 다소 흐려진다.
위키 백과 항목 : Win32에서 메모리 매핑 된 파일을 사용할 때 내 경험이었다 http://en.wikipedia.org/wiki/Memory-mapped_file
이 위키 피 디아 문서에서 언급 된 다른 제한을 보지 못했습니다. 아무도 없습니까? – user88185
이것은 이론적으로 질문에 답할 수 있지만, [http : //meta.stackoverflow.co.kr/q/8259) 여기에 답변의 핵심 부분을 포함하고 참조 용 링크를 제공하십시오. –
:
지도 한 세그먼트에 전체 파일 경우, 일반적으로 주위에 밖으로 도청 더 큰 인접한 메모리 블록을 찾을 수 없으므로 750 MB입니다. 더 작은 세그먼트, 즉 각각 100MB로 분할하면 실행중인 항목에 따라 약 1500MB-1800MB를 얻을 수 있습니다.
/3g switch을 사용하면 2GB 이상 최대 약 2700MB를 얻을 수 있지만 OS 성능에 불이익이 있습니다.
64 비트에 대해서는 잘 모르겠지만 시도한 적은 없지만 최대 파일 크기는 보유하고있는 실제 메모리의 양에 의해서만 제한됩니다.
64 비트에서 사용할 수있는 주소 공간은 32 비트와 동일합니다. 32MB 실제 메모리 만있는 32 비트 시스템에서 1GB보기를 맵핑 할 수 있습니다. 당신은 단지 0.5GB의 메모리를 가진 32 비트 컴퓨터에서 10TB 뷰를 매핑 할 수있는 것과 같은 방법입니다. 실제로 액세스하는 4KB 페이지 만 실제 메모리에 매핑됩니다. – springy76
@ springy76 : 32 비트 컴퓨터에서 10TB보기를 매핑 할 수 없습니다. 64 비트에서만 가능합니다. –
@ SergeyK. 너는 옳았다. 내가 쓰고 싶었던 것도 그렇다. 그러나 내 손가락은 다른 것을 타이프했다. "0.5TB의 메모리 만있는 64 비트 시스템에서 10TB보기를 매핑 할 수있는 것과 같은 방법"을 읽어야합니다. – springy76
플랫폼? Windows 또는 Linux? –