Gemeinsam genutzter Speicherbereich
-
Hallo Zusammen,
ich würde gerne ein Programm schreiben, dass Daten im Arbeitsspeicher ablegt, sodass eine zweite Anwendung darauf zugreifen kann (z.B. durch Erhalten der Zugriffsnummer für den Speicherbereich des 1. Programmes).
wichtig: Die Daten müssen auch noch nach Beenden des 1.Programmes im Arbeitsspeicher verfügbar sein.
Ich wäre euch überaus dankbar, wenn ihr mir da weiterhelfen könntet!
Schöne Grüße, Xzibit
-
Ist soweit ich weiß nicht oder nur begrenz möglich.
Du kannst Windows sozusagen fragen ob du auf den Speicherbereich eines anderen Programms zugreifen darfst.
Du bekommst dann glaube ich ein Kopie.Gibt aber schon einige Threads zu dem Thema hier.
Sonst guck noch mal Google.deMFG
Ace
-
Warum soll das nicht möglich sein!? Jede DLL verwendet das (der Code wird in Windows nur einmal pro Rechner geladen und zwischen allen Prozessen geteilt!)!
Dazu gibt es "shared-memory" bzw. es heisst in Windows "File Mapping".
Siehe: CreateFileMapping / OpenFileMapping / MapViewOfFile / usw.
-
Jochen Kalmbach schrieb:
Jede DLL verwendet das (der Code wird in Windows nur einmal pro Rechner geladen und zwischen allen Prozessen geteilt!)!
Das lässt sich so nicht sagen. Es hängt vom verwendeten "Windows" ab.
Unter Win95,98,ME gibt es einen Speicherbereich oberhalb 2 GB, der von allen Prozessen geteilt wird. Dort gilt es, allerdings nicht für jede DLL.
-
Win9x/ME ist kein Windows sondern DOS.
-
Jochen Kalmbach schrieb:
Win9x/ME ist kein Windows sondern DOS.
Uff ! Aber egal.
Wenn unter "Windows" der Code einer DLL nur einmal geladen und von allen Prozessen geteilt wird, dann könnte ein instabiler Prozess sämtliche anderen Prozesse gefährden.
Das wirft kein gutes Licht auf die Stabilität und Sicherheit von "Windows".
-
@Xzibit: Nach Beendigung des 1. Programmes ist kein Problem, solange das 2. Programm noch läuft. Sollen die Daten auch erhalten bleiben während keines der beiden Programme läuft musst du wohl oder übel eine Datei nehmen. Ist aber nicht tragisch, du kannst ein Memory Mapping machen um auf die Datei zuzugreifen (auch von beiden Programmen aus gleichzeitig wenn du willst!), dann hast du deinen Shared-Memory-Bereich der auch persistent ist, also überlebt.
@merker:
Das wirft kein gutes Licht auf die Stabilität und Sicherheit von "Windows".

Dass sagst du bloss weil du dich nicht auskennst

Was Sections angeht die nicht "shared" markiert sind macht Windows sofort eine priavte Kopie von Seiten in die irgendein Prozess schreibt, so dass andere Prozesse nix davon mitbekommen. Nennt man auch "copy on write".
Und in Sections die "shared" markiert sind ... nun, die sind ja "shared" markiert damit eben genau das geht, dass ein Prozess was reinschreibt und ein anderer die Änderung sieht.
-
merker schrieb:
Wenn unter "Windows" der Code einer DLL nur einmal geladen und von allen Prozessen geteilt wird, dann könnte ein instabiler Prozess sämtliche anderen Prozesse gefährden.
Naja, ich hab nur die halbe Wahrheit gesagt... der Code wird immer geteilt, es sei denn ein Prozess will was in den Code-Bereich schreiben. Dann wird eine Kopier erstellt. Das ganze nennt sich "Copy-On-Write".
-
Jochen Kalmbach schrieb:
...der Code wird immer geteilt, es sei denn ein Prozess will was in den Code-Bereich schreiben. Dann wird eine Kopie erstellt.
Na dann bin ich ja beruhigt. Die "halbe Wahrheit" hat mir ganz schön Angst eingejagt.

hustbaer schrieb:
Dass sagst du bloss weil du dich nicht auskennst

Was Sections angeht die nicht "shared" markiert sind ...
Und in Sections die "shared" markiert sind ...Welche "Sections" ? Die aus dem PE-Header ?
-
Naja, die PE File Sections halt. Sind halt Bereiche im PE Image, jeder dieser Bereiche hat nen Namen sowie diverse andere Eigenschaften, u.A. eben auch diese Flags, deren eines "SHARED" ist.
Lies es doch in der MSDN nach, z.B. in der Beschreibung zu .def Files.
-
Win9x/ME ist kein Windows sondern DOS.
Stimmt so nicht. Win9x/ME basierten nur auf DOS, und stellten einen grafischen Aufsatz dar, siehe Wikipedia.
Zum Thema: Wiegesagt, du kannst Variablen in einer DLL initialisieren, und dort dann vom Programm modifizieren, hierzu ein Tutorial:Systemweite Variablen durch Verwendung einer DLL
Ich hoffe, das hilft weiter.
MfG mikey.
-
OT: Wikipedia hat immer recht.