Hat jemand einen guten gemeinsamen Speichercontainer für C ++?

8

Ich hatte schon lange den Wunsch nach einem STLish-Container, den ich in ein Shared-Memory-Segment oder eine Memory-Mapped-Datei einfügen konnte.

Ich habe die Verwendung eines benutzerdefinierten Zuordners und einer neuen Platzierung in Betracht gezogen, um einen normalen STL-Container in ein freigegebenes Speichersegment zu platzieren. (wie dieser ddj Artikel ). Das Problem ist, dass STL-Container intern Zeiger auf ihren eigenen Speicher haben. Wenn das gemeinsam genutzte Speichersegment oder die Speicherabbilddatei an einer anderen Basisadresse geladen wird (möglicherweise bei einem nachfolgenden Lauf oder bei einem zweiten Prozess), sind die internen Zeiger daher plötzlich ungültig. Soweit ich herausfinden kann, funktioniert der Custom-Allokator-Ansatz nur, wenn Sie das Speichersegment immer an derselben Adresse in Ihren Prozess einbinden können. Zumindest bei Speicherabbilddateien habe ich viel Erfahrung damit, dass das NICHT der Fall ist, wenn Sie das System einfach so abbilden lassen, wie es sich anfühlt.

Ich habe mir Gedanken darüber gemacht, wie ich das machen soll, aber ich möchte es vermeiden, wenn jemand anderes die Arbeit bereits erledigt hat (das bin ich, ich bin faul).

Ich verlasse derzeit die Diskussion, da die beste Sperrstrategie stark von der Anwendung abhängig ist.

    
Michael Kohne 04.11.2008, 17:54
quelle

5 Antworten

12

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. Offset-Zeiger

    
grieve 04.11.2008, 18:48
quelle
0

Vielleicht möchten Sie auch die Intel Threading Building Blocks (TBB) Container .

    
Pat Notz 04.11.2008 19:05
quelle
0

Ich hatte immer gute Erfahrungen (vor Jahren) mit ACE . Es ist ein Netzwerk / Kommunikations-Framework, hat aber einen Abschnitt über Shared Memory.

    
gbjbaanb 05.11.2008 22:40
quelle
0

Ich kenne nur proprietäre Versionen. Bloomberg und EA haben beide über ihre STL-Versionen veröffentlicht, aber nicht (nach meinem Wissen) die Früchte ihrer Arbeit veröffentlicht .

    
Sanjaya R 10.11.2008 20:26
quelle
-1

Versuchen Sie Qt's QSharedMemory-Implementierung zu verwenden.

    
Ankur Gupta 04.11.2009 09:51
quelle

Tags und Links