Frage

Gibt es eine Möglichkeit direkt eine binäre Datei in dem RAM zu lesen?

Was ich meine ist, ist es eine Möglichkeit, den Compiler zu sagen, hier ist die Datei, dann ist hier der Block RAM, bitte den Dateiinhalt im RAM setzen, los geht, schnell wie möglich bitte.

Derzeit Ich trete es in dem RAM (ein Array) 64-Bit-Block von 64-Bit-Block durch die Datei mit ifstream Laden. Aber ich denke, dass dies es langsam muss sich wie es ist wie (hier kommt eine Analogie) mit einem Fingerhut das Wasser aus einem Becher zu retten (die Datei) in einen Krug (der RAM), anstatt nur die Tasse Aufnehmen und den gesamten Inhalt in den Krug in einem Zug gekippt wird.

Als ein relativer Neuling in dieser ich die falsche Vorstellung über diese völlig haben -. Jede guidence wäre eine große Hilfe sein

Ich bin gerade nach dem schnellsten Weg, um eine große Datei in den Arbeitsspeicher zu erhalten.

Danke

War es hilfreich?

Lösung

Was verhindert, dass Sie die Datei in einem Durchgang zu lesen? Ist es zu groß, in den Speicher zu passen?

Sie können auch mapped-Datei verwenden, UNIX: mmap, Fenster: Create

Andere Tipps

Ich denke, was Sie brauchen Memory-Mapped-Datei jedoch die API hängt davon ab, welches Betriebssystem sind Sie an, in UNIX ich glaube, es ist mmap ().

mmap sollte für Sie arbeiten. Die meisten Implementierungen tatsächlich die Datei nicht lesen, bis Sie die aktuellen Speicherseiten verweisen, aber in jedem Fall können Sie den Inhalt die Datei zugreifen, als ob es im RAM die ganze Zeit war.

Sie müssen nicht sagen, welche Plattform Sie sind, aber das klingt wie ein Job für Memory-Mapped-Dateien.

Ihr Programm wird den virtuellen Speicher gegeben - ein Teil davon wird auf RAM abgebildet, können einige auf Auslagerungsdatei und Sie viel über es nicht tun. Allerdings können Sie den Aufwand für die Verwendung des Dateisystem-Schnittstelle reduzieren, indem nur das Kopieren von größeren Blöcken -. Mehrere Megabyte zum Beispiel

Ich bin mir nicht sicher, ob dies ist, was Sie fragen, sondern aus einer Datei zu beschleunigen Lesen Sie mehr Bytes Puffer könnten. Das zweite Argument der gelesenen () Methode von fstream kann eingestellt werden, um die Eingangsgröße zu spezifizieren. indem man ihn, beispielsweise ein 32 K (32 * (2 ^ 10)) Wert den Leseprozess beschleunigen könnte. Ich schlage vor, Sie mit verschiedener Puffergröße einig Benchmarking zu tun.

Wenn Sie „Vermeiden Sie die Datei auf Swap zu setzen und ihn immer in RAM“ meine ich denke, Sie können, da dies etwas ist, das OS Pflege nimmt.

Sehen Sie sich das ContentStreaming Beispiel in dem DirectX SDK.

Es verwendet den Dateizuordnungs Ansatz. Offensichtlich sein verwendet den Windows-API, aber Sie können die entsprechende API für andere Plattformen als auch finden.

Das Interessante ist, dass es Ihnen die Vorgehensweise in Zusammenhang zeigt. (Lesen in / Paging in Teilen eines großen Modells (in diesem Fall Gelände) auf Anfrage

-Boost bietet Cross-Plattform-Unterstützung für Memory-Dateien abgebildet, unter anderem ...

Memory Mapped Dateien Erhöhung

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