Mailinglist Archive: opensuse-programming-de (171 mails)

< Previous Next >
Re: shared libraries - gemeinsamer Datenbereich
  • From: Raimund Hölle <mailings@xxxxxxxxxxxxxxxx>
  • Date: Thu, 23 Jan 2003 10:33:16 +0100
  • Message-id: <3E2FB6DC.50805@xxxxxxxxxxxxxxxx>
Hallo,

erst mal vielen Dank für eure Antworten.

Stefan Hundhammer schrieb:
On Mittwoch, 22. Januar 2003 15:54, Rinke, Reiner wrote:

kennt jemand einen Weg, wie mehrere Prozesse auf gemeinsame Daten in
einer shared library zugreifen können?

...

Um die Verwendung von Shared Memory möchte ich mich rumdrücken, da die
Verwaltung doch recht kompliziert ist - die gesamte Speicherzuteilung
muß manuell gestrickt werden, ich kann nicht auf existierende
C++-Listen- und Stringbibliotheken zurückgreifen.

Ganz weit hinten im Hinterkopf habe ich, daß man bei C++ und STL Allokatoren angeben kann, die eben dieses bewirken - daß ein Objekt in einer bestimmten Art Speicher angelegt wird. Schau' doch mal im Stroustrup-Buch nach!


Leider gibt es keine Möglichkeit, dies im Shared Memory anzulegen. Das Problem ist, daß C++-Objekte virtuelle Methodentabellen besitzen, die mit Zeigern auf Speicheraadressen arbeiten. Auch die gesamten STL-Container verwalten ihre Objekt mit Hilfe von Zeigern. Legt nun ein Programm ein Objekt im Shared Memory an, steht im Shared Memory also ein Zeiger mit fester Speicheradresse.

Dockt ein weiterer Prozess an das Shared Memory an (attach), bekommt er (zumindest unter Linux) mit hoher Wahrscheinlichkeit eine neue Adresse zugeteilt, damit sind alle im Shared Memory enthaltenen Zeiger falsch.

[...]

Ich werde nun wohl in den sauren Apfel beißen und die Shared-Memory-Strukturen und -Zugriffsfunktionen zu Fuß programmieren :-(

Viele Grüße
Raimund



< Previous Next >