2009-04-07 11 views
23

메모리 매핑 파일의 크기를 제한하는 것은 무엇입니까? 할당되지 않은 주소 공간의 최대 연속 덩어리보다 클 수는 없으며 충분한 여유 디스크 공간이 있어야한다는 것을 알고 있습니다. 그러나 다른 한계가 있습니까?메모리 매핑 파일의 크기는 어느 정도입니까?

+0

플랫폼? Windows 또는 Linux? –

답변

24

너무 보수적입니다. 메모리 매핑 파일은 주소 공간보다 클 수 있습니다. 보기의 메모리 매핑 된 파일은 OS 메모리 제약 조건에 의해 제한을 받지만 한 번에보고있는 파일의 일부일뿐입니다. (기술적으로는 파일의 불연속 부분에 대한 여러 뷰를 한 번에 매핑 할 수 있으므로 오버 헤드와 페이지 길이 제약을 제외하고보고있는 총 바이트 수는 제한되어 있습니다. 바이트 수를 볼 수 있습니다 [1024에 0] 바이트 두 개의 전경 [2 40 40 1,024 + 2]).

MS Windows에서 MapViewOfFile 기능 본다. 그것은 효과적으로 64 비트 파일 오프셋과 32 비트 길이를 취합니다.

+0

예, "보기"라고 말 했어야합니다. re-mmapp()를하지 않고 한 번에 전체 파일에 액세스 할 수 있어야합니다. – user88185

+0

MapViewOfFile은 64 비트 컴퓨터에서 64 비트 길이를 사용합니다. – springy76

+0

어쨌든 "파일만큼 큰"것을 의미하는 크기에 0을 전달할 수 있습니다. –

1

다른 제한이 없어야합니다. 충분하지 않아? ;-) 윈도우에서

+0

64 비트 OS에서 이러한 제한은 상당히 느슨한 것 같습니다 ... – user88185

1

". 파일 뷰의 크기는 예약되지 않은 가상 메모리의 사용 가능한 최대 연속 블록에 제한이 이미 프로세스에 의해 예약 최대 2기가바이트 뺀 가상 메모리입니다."

부터 MDSN.

LINUX/OSX/그밖에 다른 것에 대해서는 잘 모르겠지만 주소 공간과 관련이있을 것입니다.

+1

파일의 크기가 아니라 파일 자체의 크기입니다. –

+5

"2 GB에서 프로세스가 이미 예약 한 가상 메모리를 뺀 값"이 32 비트 시스템에 있습니까? 64 비트 박스에서 다른가요? – user88185

0

리눅스에서 FUSE을 사용하면 필요할 때 디스크로 확장되는 메모리 내장 파일 시스템을 만들 수 있습니다. 나는 그것이 맵핑 된 메모리로서 자격이 있는지 확신하지 못한다. 그리고 구별은 다소 흐려진다.

-3
주제에

위키 백과 항목 : Win32에서 메모리 매핑 된 파일을 사용할 때 내 경험이었다 http://en.wikipedia.org/wiki/Memory-mapped_file

+0

이 위키 피 디아 문서에서 언급 된 다른 제한을 보지 못했습니다. 아무도 없습니까? – user88185

+1

이것은 이론적으로 질문에 답할 수 있지만, [http : //meta.stackoverflow.co.kr/q/8259) 여기에 답변의 핵심 부분을 포함하고 참조 용 링크를 제공하십시오. –

9

:

지도 한 세그먼트에 전체 파일 경우, 일반적으로 주위에 밖으로 도청 더 큰 인접한 메모리 블록을 찾을 수 없으므로 750 MB입니다. 더 작은 세그먼트, 즉 각각 100MB로 분할하면 실행중인 항목에 따라 약 1500MB-1800MB를 얻을 수 있습니다.

/3g switch을 사용하면 2GB 이상 최대 약 2700MB를 얻을 수 있지만 OS 성능에 불이익이 있습니다.

64 비트에 대해서는 잘 모르겠지만 시도한 적은 없지만 최대 파일 크기는 보유하고있는 실제 메모리의 양에 의해서만 제한됩니다.

+0

64 비트에서 사용할 수있는 주소 공간은 32 비트와 동일합니다. 32MB 실제 메모리 만있는 32 비트 시스템에서 1GB보기를 맵핑 할 수 있습니다. 당신은 단지 0.5GB의 메모리를 가진 32 비트 컴퓨터에서 10TB 뷰를 매핑 할 수있는 것과 같은 방법입니다. 실제로 액세스하는 4KB 페이지 만 실제 메모리에 매핑됩니다. – springy76

+1

@ springy76 : 32 비트 컴퓨터에서 10TB보기를 매핑 할 수 없습니다. 64 비트에서만 가능합니다. –

+4

@ SergeyK. 너는 옳았다. 내가 쓰고 싶었던 것도 그렇다. 그러나 내 손가락은 다른 것을 타이프했다. "0.5TB의 메모리 만있는 64 비트 시스템에서 10TB보기를 매핑 할 수있는 것과 같은 방법"을 읽어야합니다. – springy76