Delen via


Globale en lokale functies

De globale en lokale functies worden ondersteund voor het overzetten van 16-bits code of voor het onderhouden van broncodecompatibiliteit met 16-bits Windows. Vanaf 32-bits Windows worden de globale en lokale functies geïmplementeerd als wrapper-functies die de bijbehorende heap-functies aanroepen met behulp van een ingang naar de standaard-heap van het proces. Daarom hebben de globale en lokale functies meer overhead dan andere geheugenbeheerfuncties.

De heap-functies meer functies en controle bieden dan de globale en lokale functies. Nieuwe toepassingen moeten gebruikmaken van de heap-functies, tenzij de documentatie specifiek aangeeft dat een globale of lokale functie moet worden gebruikt. Sommige Windows-functies wijzen bijvoorbeeld geheugen toe die moeten worden vrijgemaakt met LocalFreeen de globale functies worden nog steeds gebruikt met Dynamic Data Exchange (DDE), de klembordfuncties en OLE-gegevensobjecten. Zie de tabel in Memory Management Functionsvoor een volledige lijst met globale en lokale functies.

Windows-geheugenbeheer biedt geen afzonderlijke lokale heap en globale heap, zoals 16-bits Windows wel doet. Als gevolg hiervan zijn de globale en lokale families van functies gelijkwaardig en is het kiezen tussen deze functies een kwestie van persoonlijke voorkeur. Houd er rekening mee dat de wijziging van een 16-bits gesegmenteerd geheugenmodel naar een 32-bits virtueel geheugenmodel enkele van de gerelateerde globale en lokale functies en hun opties onnodig of betekenisloos heeft gemaakt. Er zijn bijvoorbeeld geen aanwijzers meer in de buurt en ver, omdat zowel lokale als globale toewijzingen 32-bits virtuele adressen retourneren.

Geheugenobjecten die zijn toegewezen door GlobalAlloc en LocalAlloc zich in privé- en vastgelegde pagina's bevinden met lees-/schrijftoegang die niet toegankelijk zijn voor andere processen. Toegewezen geheugen met behulp van GlobalAlloc- met GMEM_DDESHARE wordt niet wereldwijd gedeeld, omdat het zich in 16-bits Windows bevindt. Deze waarde heeft geen effect en is alleen beschikbaar voor compatibiliteit. Toepassingen waarvoor gedeeld geheugen is vereist voor andere doeleinden, moeten bestandstoewijzingsobjecten gebruiken. Meerdere processen kunnen een weergave van hetzelfde object voor bestandstoewijzing toewijzen om een benoemd gedeeld geheugen te bieden. Zie Bestandstoewijzingvoor meer informatie.

Geheugentoewijzingen worden alleen beperkt door het beschikbare fysieke geheugen, inclusief opslag in het wisselbestand op schijf. Wanneer u vast geheugen toewijst, retourneert GlobalAlloc en LocalAlloc een aanwijzer die het aanroepende proces onmiddellijk kan gebruiken om toegang te krijgen tot het geheugen. Wanneer u verplaatsbaar geheugen toewijst, is de retourwaarde een ingang. Als u een aanwijzer naar een beweegbaar geheugenobject wilt krijgen, gebruikt u de functies GlobalLock en LocalLock.

De werkelijke grootte van het toegewezen geheugen kan groter zijn dan de aangevraagde grootte. Als u het werkelijke aantal toegewezen bytes wilt bepalen, gebruikt u de functie GlobalSize of LocalSize. Als het toegewezen bedrag groter is dan het aangevraagde bedrag, kan het proces het volledige bedrag gebruiken.

De functies GlobalReAlloc en LocalReAlloc wijzigen de grootte of kenmerken van een geheugenobject dat is toegewezen door GlobalAlloc en LocalAlloc. De grootte kan toenemen of verkleinen.

De functies GlobalFree en LocalFree geven geheugen vrij die zijn toegewezen door GlobalAlloc, LocalAlloc, GlobalReAllocof LocalReAlloc. Gebruik de functie GlobalDiscard of LocalDiscard om het opgegeven geheugenobject te verwijderen zonder de ingang ongeldig te maken. De ingang kan later worden gebruikt door GlobalReAlloc of LocalReAlloc om een nieuw geheugenblok toe te wijzen dat aan dezelfde ingang is gekoppeld.

Als u informatie over een opgegeven geheugenobject wilt retourneren, gebruikt u de functie GlobalFlags of LocalFlags. De informatie bevat het aantal vergrendelingen van het object en geeft aan of het object kan worden verwijderd of al is verwijderd. Als u een ingang wilt retourneren naar het geheugenobject dat is gekoppeld aan een opgegeven aanwijzer, gebruikt u de functie GlobalHandle of LocalHandle.

geheugentoewijzingsmethoden vergelijken