2010-03-28 16 views
12

Ich möchte eine zugeordnete binäre Datei im Speicher erstellen; Ich bin mir jedoch nicht sicher, wie die Datei erstellt werden soll, die dem System zugeordnet werden soll. Ich lese die Dokumentation mehrmals und stelle fest, dass es zwei gemappte Dateiimplementierungen gibt, eine in Iostream und die andere in Interprozess.Gibt es einen Unterschied zwischen Boost Iostream Mapped File und Boost Interprocess Mapped File?

Haben Sie eine Idee, wie Sie eine gemappte Datei in Shared Memory erstellen können? Ich versuche, einem Multi-threaded-Programm zu ermöglichen, ein Array von großen doppelten in einem binären Dateiformat geschriebenen zu lesen. Worin besteht auch der Unterschied zwischen der abgebildeten Datei in Iostream und Interprocess?

Antwort

2

Soweit ich weiß, wird Iostreams die zugeordnete Datei im Shared Memory (das ist, was Sie wollen); interprocess platziert die Datei jedoch im Adressraum eines anderen Prozesses.

Sie sollten wahrscheinlich Iostreams verwenden, es sei denn, Sie haben mehrere Prozesse (nicht Threads), die in irgendeiner Weise miteinander kommunizieren.

+0

Danke für die Klarstellung Joe, ich werde Iostream ausprobieren. – Yijinsei

+2

@Joe D: Das ist nicht der Eindruck, den ich überhaupt von der Interprozess-Bibliothek bekomme. Insbesondere aus der Dokumentation: "Das System erstellt eine Dateizuordnung, um die Datei und den Adressraum des Prozesses zuzuordnen." Für mehrere Prozesse hat er im Wesentlichen Speicher mit einer Dateisystemsicherung geteilt. – rcollyer

+0

Ja, aber die Interprozessbibliothek erstellt kein Dateisystembackup, sondern ordnet die Datei einfach im Interprozess-Shared Memory zu. Iostreams wird es jedoch in den Speicher für einen einzelnen Prozess abbilden. Welches ist wahrscheinlich (ich habe die Implementierung nicht überprüft) effizienter. –

0

Der Hauptunterschied, den ich zwischen den beiden sehe, ist, wie sie verwendet werden. Um in boost-interprocess eine Speicherabbilddatei zu verwenden, erstellen Sie Objekte in diesem Speicherbereich mit der Position new, und diese Objekte sind automatisch in Ihrer Datei in Binärform persistent. Andere Prozesse können dann dieselbe Datei zuordnen und diese Objekte verwenden, oder das Programm kann sie als persistenten Cache verwenden und später erneut laden. Speicherabbilddateien in boost-iostreams wirken genauso wie Dateiströme, mit den zusätzlichen Vorteilen, dass sie eine boost::iostream sind, und würden Stream-Semantik für die Interprozesskommunikation bereitstellen.

Für einen einzelnen Prozess ist die Verwendung von Speicherabbilddateien boost::iostream nicht von großem Vorteil. Es kann jedoch die Latenz beim Arbeiten mit der Datei reduzieren, da sie bereits in den Speicher geladen wurde. Aber Sie profitieren nur dann davon, wenn Sie Teile der Datei ständig neu schreiben. Bei einem einzelnen Lese-/Schreib-Durchlauf der Datei kann keine Beschleunigung auftreten.

Verwandte Themen