🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: de.comp.lang.c++
Article #1709

Objekte in Shared Memory (Q: gcc 2.7.1: Aufruf einer Konstruktormethode aus einer anderen)

#1709
From: Dietmar Kuehl
Date: Thu, 29 Feb 1996 00:25
66 lines
3882 bytes
Hi,

(noch ein Followup zu dem selben Artikel: Divide and Conquer :-)

Ullrich von Bassewitz (uz@wuschel.ibb.schwaben.com) wrote:
(worauf er sich bezieht, habe ich geschrieben...).
: > Da sich der ISO C++ Standard nicht ueber Shared Memory auslaesst, ist
: > ALLES unportable. ... und ich lege Dir trotzdem problemlos bestimmte
: > Objekte in Shared Memory an (placement-new laesst gruessen).  Ausserdem

: Tja, reingefallen (aber troeste Dich, so ging's mir auch :-).

Ich wuesste nicht wo ich reingefallen bin, aber das haengt vermutlich
damit zusammen, das ich die Nebenbedingungen, die ich an die Objekte
stelle, um sie in Shared Memory anzulegen, nicht genannt habe (note:
"bestimmte Objekte"). Da ich schonmal mit Shared Memory zu tun hatte,
bevor ich das erste Mal versucht habe, C++ Objekte in Shared Memory zu
packen, bin ich da nicht mehr reingefallen.

: Natuerlich laesst sich ein Objekt mittels placement new in das Shared Memory
: legen. Aber rate mal, was passiert, wenn Du von einem anderen Programm (das
: natuerlich auch Zugriff auf das SM haben muss) virtuelle Methoden aufrufst?
: Stichwort VMT (oder vtable) Zeiger...

Ja, sicher: Virtuelle Funktionen duerfen die "bestimmten Objekte" nicht
enthalten.  Hier ist die Liste der Einschraenkungen fuer eine Klasse,
deren Objekte in Shared Memory angelegt werden sollen:

- keine virtuellen Funktionen
- keine virtualle Vererbung. Mehrfachvererbung wuerde ich auch
  vermeiden, u.U. kann man Mehrfachvererbung auch nicht benutzen: Dazu
  habe ich mir noch keine Gedanken gemacht... (ich wuerde vermutlich
  sogar, wenn moeglich, ganz auf Vererbung verzichten: virtuelle
  Funktionen gehen sowieso nicht...)
- keine Referenzen als non-static members
- keine Pointer als non-static members

Zumindest unter UNIX gibt es keine Zusicherung, dass die Adressen in
allen Programmen, die sich das Shared Memory Segment teilen, identisch
sind. Daher die drei zusaetzlichen Einschraenkungen (ich kann mir
vorstellen, dass andere Platformen diese Einschraenkungen nicht
haben...). Es gibt aber mit den Objekten nochmehr Probleme:

- auf Array-Objekte sollte verzichtet werden (also kein 'new(...)
  foo[..]'): die Anfangsadresse laesst sich in den anderen Programmen
  nicht portable ermitteln.
- ggf. (wenn externe Resourcen verwaltet werden) muss dafuer gesorgt
  werden, dass ein passender Destruktor (und auch nur EINER) aufgerufen
  wird.
- alle Programme sollten mit dem selben C++ Compiler compiliert sein
  (sonst sind nachher die Member in unterschiedlicher Reihenfolge
  abgelegt: Man kann naemlich nicht nur POD in Shared Memory ablegen).
- alle Programme sollten exakt die selbe Klassendeklaration verwenden
  (nicht etwa 'public' und 'private' Specifier verschieben).

Abgesehen davon, dass modifizierende Zugriffe zwischen den Programmen
synchronisiert werden muessen, fallen mir jetzt gerade keine
Einschraenkungen mehr ein. Dafuer sind das die selben Einschraenkungen,
wie wenn man ein (platform-spezifisches) File mit 'mmap(2)' in den
Speicher "mapped" und da drin Objekte angelegt (zum Beispiel um eine
einfache Persitance zu basteln). Aber hier geht's um C++, nicht um UNIX
low-level Programmierung...
--
dietmar.kuehl@uni-konstanz.de
http://www.informatik.uni-konstanz.de/~kuehl
I am a realistic optimist - that's why I appear to be slightly pessimistic
Technical Details
Message-ID: <4h2rq5$cto@news.BelWue.DE>
Path: arc1-ca.pugleaf.net!news.belwue.de!uzwil!kuehl

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!news.belwue.de!uzwil!kuehl
From: kuehl@uzwil.informatik.uni-konstanz.de (Dietmar Kuehl)
Newsgroups: de.comp.lang.c++
Subject: Objekte in Shared Memory (Q: gcc 2.7.1: Aufruf einer Konstruktormethode aus einer anderen)
Date: 29 Feb 1996 00:25:41 GMT
Organization: Fakultät für Mathematik und Informatik
Message-ID: <4h2rq5$cto@news.BelWue.DE>
Reply-To: dietmar.kuehl@uni-konstanz.de
NNTP-Posting-Host: uzwil.informatik.uni-konstanz.de
X-Newsreader: TIN [version 1.2 PL2]