Frage

ich lange habe einen Wunsch nach einem STLish Behälter habe, dass ich in ein Shared-Memory-Segment oder eine Memory-Mapped-Datei einfügen konnte.

Ich habe die Verwendung eines benutzerdefiniertes allocator und Platzierung neuer als einen regulären STL-Container in ein Shared-Memory-Segment zu platzieren. (Wie dieser ddj Artikel ). Das Problem ist, dass STL-Container intern Zeiger hat in den Speicher sie besitzen. wenn das Shared-Memory-Segment oder im Speicher abgebildeten Datei lädt an einer anderen Adresse Basis daher (vielleicht auf einem nachfolgenden Durchlauf oder in einem zweiten Prozess), dann wird die internen Zeiger sind plötzlich ungültig. Soweit ich herausfinden kann, nur der benutzerdefinierte allocator Ansatz funktioniert, wenn Sie immer das Speichersegment in Ihren Prozess an derselben Adresse zuordnen. Zumindest mit Memory-Mapped-Dateien, ich habe viel Erfahrung dieses nicht der Fall sein, wenn Sie nur die Systemkarte lassen Sie es immer, wo es sich anfühlt.

Ich habe einige Gedanken gehabt, wie dies zu tun, aber ich möchte es vermeiden, wenn jemand anderes die Arbeit bereits getan hat (das ist mir, faul).

ich zur Zeit Weglassen der Diskussion sperren, wie die beste Sperrstrategie stark anwendungsabhängig ist.

War es hilfreich?

Lösung

Der beste Ausgangspunkt dafür ist wahrscheinlich die Boost-Inter Bibliotheken. Sie haben ein gutes Beispiel für eine Karte im gemeinsam genutzten Speicher hier: Inter Karte

Sie werden wahrscheinlich wollen auch den Abschnitt Offset intelligente Zeiger lesen, die den internen Zeiger Problem löst Sie sich beziehen waren. Pointer Offset

Andere Tipps

Ich hatte immer gute Erfahrungen (vor Jahren) mit ACE . Es ist eine Vernetzung / Kommunikation Rahmen, sondern hat einen Abschnitt über den gemeinsamen Speicher.

Ich weiß nur von proprietären Versionen. Bloomberg und EA beide über ihre STL-Versionen veröffentlicht haben, aber haben freigegeben (meines Wissens) die Früchte ihrer Arbeit.

Versuchen Qt QSharedMemory Implementierung verwendet wird.

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