Frage

Was begrenzt die Größe einer Memory-Mapped-Datei? Ich weiß es nicht größer sein kann als das größte zusammenhängende Stück nicht zugewiesenen Adressraumes, und dass es genügend freier Speicherplatz sein. Aber es gibt auch andere Grenzen?

War es hilfreich?

Lösung

Sie sind es doch sehr konservativ: Eine Memory-Mapped-Datei größer sein kann als der Adressraum. Die Ansicht der Memory-Mapped-Datei wird von OS-Speicherbeschränkungen begrenzt, aber das ist nur der Teil der Datei, an denen Sie suchen auf einmal. (Und ich denke, technisch konnte man auf einmal mehrere Ansichten von diskontinuierlichen Teile der Datei zuzuordnen, so abgesehen von Kopf- und Seitenlänge Einschränkungen, es ist nur die Gesamtanzahl der Bytes Sie an, dass suchen eine Grenze darstellt. Sie können an Bytes aussehen könnte [0-1024] und Bytes [2 40 2 40 + 1024] mit zwei getrennten Ansichten.)

In MS Windows, Blick auf die MapViewOfFile Funktion. Es dauert effektiv eine 64-Bit-Datei-Offset und eine Länge von 32 Bit.

Andere Tipps

Dies war meine Erfahrung, wenn Memory-Mapped-Dateien unter Win32 mit:

Wenn Sie Ihre Karte der gesamte Datei in ein Segment, tippt er normalerweise aus bei etwa 750 MB, weil es nicht einen größeren zusammenhängenden Speicherblock finden kann. Wenn Sie es in kleinere Segmente aufgeteilt, sagen 100MB jeder, können Sie rund um 1500MB-1800MB je nachdem, was sonst noch läuft.

Wenn Sie die / 3g Schalter können Sie mehr bekommen als 2GB bis zu 2700MB aber OS Leistung bestraft wird.

Ich bin mir nicht sicher über 64-bit, ich habe es nie versucht, aber ich nehme an der maximale Dateigröße dann nur durch die Größe des physikalischen Speichers begrenzt ist, die Sie haben.

Es sollten keine anderen Grenzen liegen. Ist das nicht genug? ; -)

Unter Windows: „Die Größe einer Datei im Hinblick auf die größten verfügbaren zusammenhängenden Block von nicht reservierten virtuellen Speichers begrenzt Dies ist höchstens 2 GB minus der virtuelle Speicher bereits durch den Prozess reserviert.“

MDSN .

Ich bin nicht sicher über LINUX / OSX / was auch immer sonst, aber es ist wahrscheinlich auch im Zusammenhang Raum zu adressieren.

Mit FUSE auf Linux Sie könnte auch ein In-Memory-Dateisystem machen, die bei Bedarf auf der Platte erstreckt. Ich bin nicht sicher, dass als Speicher abgebildet qualifiziert, und die Unterscheidung bekommt Art verschwommen.

Ja, es gibt Grenzen für Memory-Mapped-Dateien. Die meisten schockierend ist:

  

Memory-Mapped-Dateien dürfen nicht größer als 2 GB auf 32-Bit-Systemen.

     

Wenn ein memmap eine Datei verursacht über seine aktuelle Größe im Dateisystem erstellt oder erweitert wird, sind die Inhalte des neuen Teils nicht näher bezeichnet. Auf Systemen mit POSIX-Dateisystem Semantik wird der erweiterte Teil mit Null-Bytes gefüllt werden.

Auch auf meinem 64-Bit, 32 GB RAM System, erhalte ich die folgende Fehlermeldung, wenn ich versuche, anstatt ich Teile davon unter Verwendung von Byte-Offsets in einer großen numpy Memory-Mapped-Datei zu lesen:

Overflow Error: memory mapped size must be positive

Große Datenmengen sind wirklich ein Schmerz zu arbeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top