Globale und lokale Funktionen

Die globalen und lokalen Funktionen werden zum Portieren von 16-Bit-Code oder zur Aufrechterhaltung der Quellcodekompatibilität mit 16-Bit-Windows unterstützt. Ab 32-Bit-Windows werden die globalen und lokalen Funktionen als Wrapperfunktionen implementiert, die die entsprechenden Heapfunktionen mithilfe eines Handles für den Standardheap des Prozesses aufrufen. Daher haben die globalen und lokalen Funktionen einen größeren Mehraufwand als andere Speicherverwaltungsfunktionen.

Die Heapfunktionen bieten mehr Features und Kontrolle als die globalen und lokalen Funktionen. Neue Anwendungen sollten die Heapfunktionen verwenden, es sei denn, in der Dokumentation ist ausdrücklich angegeben, dass eine globale oder lokale Funktion verwendet werden soll. Einige Windows Funktionen belegen beispielsweise Arbeitsspeicher, der mit LocalFreefreigegeben werden muss, und die globalen Funktionen werden weiterhin mit dynamische Daten Exchange (DDE), den Zwischenablagefunktionen und OLE-Datenobjekten verwendet. Eine vollständige Liste der globalen und lokalen Funktionen finden Sie in der Tabelle unter Speicherverwaltungsfunktionen.

Windows Speicherverwaltung stellt keinen separaten lokalen Heap und globalen Heap bereit, wie 16-Bit-Windows. Daher sind die globalen und lokalen Funktionsfamilien gleichwertig, und die Wahl zwischen ihnen ist eine Frage der persönlichen Präferenz. Beachten Sie, dass die Änderung von einem segmentierten 16-Bit-Speichermodell in ein 32-Bit-Modell für virtuellen Speicher einige der zugehörigen globalen und lokalen Funktionen und deren Optionen unnötig oder bedeutungslos gemacht hat. Es gibt z. B. keine nah- und fernen Zeiger mehr, da sowohl lokale als auch globale Zuordnungen virtuelle 32-Bit-Adressen zurückgeben.

Speicherobjekte, die von GlobalAlloc und LocalAlloc zugeordnet werden, befinden sich auf privaten Seiten mit Lese-/Schreibzugriff, auf die von anderen Prozessen nicht zugegriffen werden kann. Arbeitsspeicher, der mithilfe von GlobalAlloc mit GMEM _ DDESHARE belegt wird, wird nicht global freigegeben, da er sich in 16-Bit-Windows befindet. Dieser Wert hat keine Auswirkungen und ist nur aus Kompatibilitätsgründen verfügbar. Anwendungen, die freigegebenen Arbeitsspeicher für andere Zwecke benötigen, müssen Dateizuordnungsobjekte verwenden. Mehrere Prozesse können eine Ansicht desselben Dateizuordnungsobjekts zuordnen, um benannten freigegebenen Arbeitsspeicher bereitzustellen. Weitere Informationen finden Sie unter Dateizuordnung.

Speicherbelegungen sind nur durch den verfügbaren physischen Arbeitsspeicher beschränkt, einschließlich des Speichers in der Auslagerungsdatei auf dem Datenträger. Wenn Sie festen Arbeitsspeicher zuweisen, geben GlobalAlloc und LocalAlloc einen Zeiger zurück, den der aufrufende Prozess sofort für den Zugriff auf den Arbeitsspeicher verwenden kann. Wenn Sie verschiebebaren Speicher zuordnen, ist der Rückgabewert ein Handle. Verwenden Sie die Funktionen GlobalLock und LocalLock, um einen Zeiger auf ein verschiebbares Speicherobjekt abzurufen.

Die tatsächliche Größe des zugeordneten Arbeitsspeichers kann größer als die angeforderte Größe sein. Verwenden Sie die GlobalSize- oder LocalSize-Funktion, um die tatsächliche Anzahl der zugeordneten Bytes zu bestimmen. Wenn der zugeordnete Betrag größer als der angeforderte Betrag ist, kann der Prozess den gesamten Betrag verwenden.

Die Funktionen GlobalReAlloc und LocalReAlloc ändern die Größe oder die Attribute eines Speicherobjekts, das von GlobalAlloc und LocalAlloczugeordnet wird. Die Größe kann sich erhöhen oder verringern.

Die Funktionen GlobalFree und LocalFree geben Arbeitsspeicher frei, der von GlobalAlloc, LocalAlloc, GlobalReAllocoder LocalReAllocbelegt wird. Verwenden Sie die GlobalDiscard- oder LocalDiscard-Funktion, um das angegebene Speicherobjekt zu verwerfen, ohne das Handle ungültig zu machen. Das Handle kann später von GlobalReAlloc oder LocalReAlloc verwendet werden, um einen neuen Speicherblock zuzuweisen, der dem gleichen Handle zugeordnet ist.

Verwenden Sie die GlobalFlags- oder LocalFlags-Funktion, um Informationen zu einem angegebenen Speicherobjekt zurückzugeben. Die Informationen enthalten die Sperrenanzahl des Objekts und geben an, ob das Objekt verwerfbar ist oder bereits verworfen wurde. Verwenden Sie die GlobalHandle- oder LocalHandle-Funktion, um ein Handle für das Speicherobjekt zurückzugeben, das einem angegebenen Zeiger zugeordnet ist.

Vergleichen von Speicherbelegungsmethoden