Gemeinsame Nutzung von Speicher
Nach oben zu Speicherverwaltung - Index
In diesem Abschnitt wird beschrieben, wie mit dem Speichermanager Speicher gemeinsam genutzt wird.
Wenn unter Win32 und Win64 eine DLL Routinen exportiert, die lange Strings oder dynamische Arrays als Parameter oder als Funktionsergebnis übergeben (entweder direkt oder in Records bzw. Objekten), müssen die DLL und ihre Client-Anwendungen (oder DLLs) denselben Speichermanager verwenden. Dasselbe gilt, wenn eine Anwendung oder DLL mit System.New oder System.GetMem Speicherplatz reserviert, der in einem anderen Modul durch einen Aufruf von System.Dispose oder System.FreeMem freigegeben wird. Es gibt zwei sich gegenseitig ausschließende Methoden, über die der Speichermanager von einer Anwendung und ihren Bibliotheken gemeinsam genutzt werden kann: ShareMem und SimpleShareMem.
Unter Posix nutzen die Anwendung und die gemeinsame Bibliothek bereits die Systembibliothek einschließlich von malloc, free und realloc gemeinsam.
Hinweis: Wenn eine DLL statisch mit einer Anwendung gelinkt ist, wird die DLL vor der Anwendung initialisiert. Die Anwendung verwendet den Speichermanager der DLL, wenn die Methode SimpleShareMem für beide aufgerufen wird. Nur das Modul, das seinen Speichermanager bereitstellt, kann die Einstellungen des Speichermanagers ändern und die Statistik des Speichermanagers abrufen. Das Ändern der Einstellungen in anderen Modulen hat keine Auswirkungen, da ihre Speichermanager nicht verwendet werden. Es ist möglich, aber selten erforderlich, den Mechanismus des Speichermanagers zur gemeinsamen Nutzung von Speicher manuell zu steuern.
So verwenden Sie ShareMem:
- Geben Sie ShareMem als erste Unit in der uses-Klausel des Programms und der Bibliothek an. Ihre Module werden abhängig von der externen Bibliothek BORLNDMM.DLL, wodurch sie zugewiesenen Speicher dynamisch gemeinsam nutzen können.
- Stellen Sie die Bibliothek BORLNDMM.DLL mit Ihrer Anwendung oder DLL bereit, die ShareMem verwendet. Wenn eine Anwendung oder DLL ShareMem verwendet, ersetzt BORLNDMM.DLL den Speichermanager dieser Anwendung oder DLL.
So verwenden Sie SimpleShareMem:
- Geben Sie SimpleShareMem als erste Unit in der uses-Klausel des Programms und der Bibliothek aller Module an. Das Modul, das als erstes initialisiert wird, stellt seinen Speichermanager für die gemeinsame Nutzung zur Verfügung. Alle Module, die danach initialisiert werden, verwenden den Speichermanager des ersten Moduls.
- Das Modul, das als erstes initialisiert wird, stellt seinen Speichermanager für die gemeinsame Nutzung zur Verfügung. Alle Module, die danach initialisiert werden, verwenden den Speichermanager des ersten Moduls.