Dela via


Omfång för allokerat minne

Allt minne som en process allokerar med hjälp av minnesallokeringsfunktionerna ( HeapAlloc, VirtualAlloc, GlobalAlloceller LocalAlloc) är endast tillgängligt för processen. Minne som allokeras av en DLL allokeras dock i adressutrymmet för den process som anropade DLL och inte är tillgänglig för andra processer med samma DLL. Om du vill skapa delat minne måste du använda filmappning.

Med namngiven filmappning kan du enkelt skapa ett block med delat minne. En process kan ange ett namn när den använder funktionen CreateFileMapping för att skapa ett filmappningsobjekt. Andra processer kan ange samma namn för funktionen CreateFileMapping eller OpenFileMapping för att hämta en referens till mappningsobjektet.

Varje process anger dess handtag till filmappningsobjektet i funktionen MapViewOfFile för att mappa en vy över filen till sitt eget adressutrymme. Vyerna för alla processer för ett enda filmappningsobjekt mappas till samma delbara sidor med fysisk lagring. De virtuella adresserna för de mappade vyerna kan dock variera från en process till en annan, såvida inte funktionen MapViewOfFileEx används för att mappa vyn till en angiven adress. Även om det är delbart är de sidor med fysisk lagring som används för en mappad filvy inte globala. de är inte tillgängliga för processer som inte har mappat en vy över filen.

Alla sidor som har checkats in genom att mappa en vy av en fil släpps när den sista processen med en vy över mappningsobjektet antingen avslutar eller avmappar vyn genom att anropa funktionen UnmapViewOfFile. För närvarande uppdateras den angivna filen (om någon) som är associerad med mappningsobjektet. En angiven fil kan också tvingas att uppdatera genom att anropa funktionen FlushViewOfFile.

Mer information finns i Filmappning. Ett exempel på delat minne i en DLL finns i Using Shared Memory in a Dynamic-Link Library.

Om flera processer har skrivåtkomst till delat minne måste du synkronisera åtkomsten till minnet. Mer information finns i Synkronisering.