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 aufrufen, mithilfe eines Handles zum Standardhap des Prozesses verwendet werden. Daher haben die globalen und lokalen Funktionen mehr Aufwand als andere Speicherverwaltungsfunktionen.
Die Heapfunktionen mehr Funktionen und Kontrolle bieten als die globalen und lokalen Funktionen. Neue Anwendungen sollten die Heap-Funktionen 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 Speicher zu, die mit LocalFree-freigegeben werden müssen, 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 in Speicherverwaltungsfunktionen.
Die Windows-Speicherverwaltung bietet keinen separaten lokalen Heap und globalen Heap, wie 16-Bit-Windows tut. Daher sind die globalen und lokalen Funktionsfamilien gleichwertig und die Wahl zwischen ihnen ist eine Frage der persönlichen Vorliebe. Beachten Sie, dass die Änderung eines 16-Bit-Segmentierten Speichermodells zu einem 32-Bit-virtuellen Speichermodell einige der zugehörigen globalen und lokalen Funktionen und deren Optionen unnötig oder sinnlos gemacht hat. So gibt es beispielsweise keine näheren und weit entfernten Zeiger mehr, da sowohl lokale als auch globale Zuordnungen virtuelle 32-Bit-Adressen zurückgeben.
Von GlobalAlloc zugewiesene Speicherobjekte und LocalAlloc- befinden sich in privaten, zugesicherten Seiten mit Lese-/Schreibzugriff, auf die von anderen Prozessen nicht zugegriffen werden kann. Der mithilfe GlobalAlloc- mit GMEM_DDESHARE zugewiesene Speicher wird nicht global freigegeben, wie es in 16-Bit-Windows ist. Dieser Wert hat keine Auswirkung und ist nur aus Kompatibilitätsgründen verfügbar. Anwendungen, die gemeinsam genutzten Speicher für andere Zwecke benötigen, müssen Dateizuordnungsobjekte verwenden. Mehrere Prozesse können eine Ansicht desselben Dateizuordnungsobjekts zuordnen, um benannten freigegebenen Speicher bereitzustellen. Weitere Informationen finden Sie unter Dateizuordnung.
Speicherzuweisungen sind nur durch den verfügbaren physischen Speicher begrenzt, einschließlich des Speichers in der Auslagerungsdatei auf dem Datenträger. Wenn Sie festen Arbeitsspeicher zuweisen, GlobalAlloc und LocalAlloc einen Zeiger zurückgeben, den der aufrufende Prozess sofort für den Zugriff auf den Speicher verwenden kann. Wenn Sie verschiebebaren Speicher zuweisen, 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 Speichers kann größer als die angeforderte Größe sein. Um die tatsächliche Anzahl der zugewiesenen Bytes zu ermitteln, verwenden Sie die GlobalSize oder LocalSize-Funktion. Wenn der zugeteilte Betrag größer als der angeforderte Betrag ist, kann der Vorgang den gesamten Betrag verwenden.
Die funktionen GlobalReAlloc und LocalReAlloc ändern die Größe oder die Attribute eines Speicherobjekts, das von GlobalAlloc und LocalAlloczugewiesen wird. Die Größe kann vergrößert oder verkleinert werden.
Die funktionen GlobalFree and LocalFree release memory allocated by GlobalAlloc, LocalAlloc, GlobalReAlloc, or LocalReAlloc. Um das angegebene Speicherobjekt zu verwerfen, ohne den Handle ungültig zu machen, verwenden Sie die GlobalDiscard- oder LocalDiscard--Funktion. 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 GlobalFlags-- oder LocalFlags- funktion. Die Informationen enthalten die Sperranzahl des Objekts und gibt an, ob das Objekt verworfen oder bereits verworfen wurde. Um ein Handle an das Speicherobjekt zurückzugeben, das einem angegebenen Zeiger zugeordnet ist, verwenden Sie die GlobalHandle- oder LocalHandle--Funktion.
Verwandte Themen