Globale und lokale Funktionen

Die globalen und lokalen Funktionen werden für die Portierung von 16-Bit-Code oder für die 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 höheren 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 wird ausdrücklich angegeben, dass eine globale oder lokale Funktion verwendet werden soll. Beispielsweise weisen einige Windows-Funktionen Arbeitsspeicher zu, der mit LocalFree freigegeben werden muss, und die globalen Funktionen werden weiterhin mit Dynamic Data Exchange (DDE), den Zwischenablagefunktionen und OLE-Datenobjekten verwendet. Eine vollständige Liste der globalen und lokalen Funktionen finden Sie in der Tabelle unter Speicherverwaltungsfunktionen.

Die Windows-Speicherverwaltung bietet keinen separaten lokalen heap und globalen Heap, wie dies bei 16-Bit-Windows der Fall ist. 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 Umstellung von einem 16-Bit-Segmented Memory-Modell zu einem 32-Bit-Modell des virtuellen Arbeitsspeichers einige der zugehörigen globalen und lokalen Funktionen und deren Optionen unnötig oder bedeutungslos gemacht hat. Beispielsweise gibt es keine Nah- und Fernzeiger mehr, da sowohl lokale als auch globale Zuordnungen virtuelle 32-Bit-Adressen zurückgeben.

Von GlobalAlloc und LocalAlloc zugeordnete Speicherobjekte befinden sich auf privaten, committeten Seiten mit Lese-/Schreibzugriff, auf die von anderen Prozessen nicht zugegriffen werden kann. Der mithilfe von GlobalAlloc mit GMEM_DDESHARE zugeordnete Arbeitsspeicher wird nicht global freigegeben, da er in 16-Bit-Windows verwendet wird. Dieser Wert hat keine Auswirkung 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.

Die Speicherbelegungen werden nur durch den verfügbaren physischen Arbeitsspeicher begrenzt, 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 beweglichen Arbeitsspeicher zuordnen, ist der Rückgabewert ein Handle. Um einen Zeiger auf ein bewegliches Speicherobjekt abzurufen, verwenden Sie die Funktionen GlobalLock und LocalLock .

Die tatsächliche Größe des zugeordneten Arbeitsspeichers kann größer als die angeforderte Größe sein. Verwenden Sie die Funktion GlobalSize oder LocalSize , 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 LocalAlloc zugeordnet wird. Die Größe kann vergrößert oder verringert werden.

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

Um Informationen zu einem angegebenen Speicherobjekt zurückzugeben, verwenden Sie die Funktion GlobalFlags oder LocalFlags . Die Informationen enthalten die Sperranzahl des Objekts und geben an, ob das Objekt verworfen werden kann oder bereits verworfen wurde. Verwenden Sie die Funktion GlobalHandle oder LocalHandle , um ein Handle an das Speicherobjekt zurückzugeben, das einem angegebenen Zeiger zugeordnet ist.

Vergleichen von Speicherbelegungsmethoden