Frage

Ich habe mit einer großen Menge an Daten befassen, die in der Regel nicht in den Hauptspeicher passt. Die Art, wie ich Zugriff auf diese Daten hoch Lokalität hat, so das Caching Teile davon im Speicher sieht aus wie eine gute Option. Ist es möglich, nur malloc () eine riesige Auswahl, und lassen Sie das Betriebssystem herauszufinden, welche Bits zu Seite und welche Bits halten?

War es hilfreich?

Lösung

, um die Daten Angenommen, aus einer Datei kommt, sind Sie besser dran Speicher-Mapping die Datei. Ansonsten, was Sie Ihr Array am Ende tut zuteilt, und dann das Kopieren der Daten aus der Datei in das Feld - und da Ihr Array in die Auslagerungsdatei zugeordnet ist, sind Sie im Grunde das Kopieren nur die Originaldatei in die Auslagerungsdatei, und in dem Prozess Verschmutzung den „Cache“ (dh physischen Speichers), so dass andere Daten, die derzeit aktiv sind haben eine viel bessere Chance, vertrieben werden. Dann, wenn Sie Sie fertig ist (in der Regel) schreibt die Daten wieder aus dem Array auf die Originaldatei, die (in diesem Fall) Mittel aus der Auslagerungsdatei wieder auf die ursprüngliche Datei kopiert werden.

Speicher die Dateizuordnung stattdessen schaffen nur einigen Adressraum und bildet sie direkt auf die Originaldatei statt. Dadurch wird vermieden, Daten aus der ursprünglichen Datei in die Auslagerungsdatei zu kopieren (und wieder zurück, wenn Sie fertig ist) sowie Daten vorübergehend in der physischen Speicher auf dem Weg von der Original-Datei in die Auslagerungsdatei zu bewegen. Der größte Sieg, ist natürlich, wenn / falls es wesentliche Teile der ursprünglichen Datei, dass Sie wirklich überhaupt nicht verwenden (in diesem Fall können sie überhaupt nicht in der physischen Speicher gelesen werden, vorausgesetzt, der nicht verwendeten Brocken mindestens eine Seite in der Größe).

Andere Tipps

Wenn die Daten in einer großen Datei sind, schauen Sie in mmap verwendet, es zu lesen. Moderne Computer haben so viel RAM, Sie möglicherweise nicht genug, um Swap-Speicher zur Verfügung.

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