Ambito della memoria allocata
Tutta la memoria allocata da un processo tramite le funzioni di allocazione della memoria ( HeapAlloc, VirtualAlloc, GlobalAlloco LocalAlloc) è accessibile solo al processo. Tuttavia, la memoria allocata da una DLL viene allocata nello spazio indirizzi del processo che ha chiamato la DLL e non è accessibile ad altri processi usando la stessa DLL. Per creare la memoria condivisa, è necessario usare il mapping dei file.
Il mapping dei file denominati offre un modo semplice per creare un blocco di memoria condivisa. Un processo può specificare un nome quando usa la funzionecreateFileMappingper creare un oggetto di mapping di file. Altri processi possono specificare lo stesso nome per la CreateFileMapping o funzione OpenFileMapping per ottenere un handle per l'oggetto mapping.
Ogni processo specifica il relativo handle per l'oggetto di mapping dei file nella funzione MapViewOfFile per eseguire il mapping di una visualizzazione del file nello spazio indirizzi specifico. Le visualizzazioni di tutti i processi per un singolo oggetto di mapping di file vengono mappate nelle stesse pagine condivisibili dell'archiviazione fisica. Tuttavia, gli indirizzi virtuali delle visualizzazioni mappate possono variare da un processo a un altro, a meno che non venga usata la funzioneMapViewOfFileExper eseguire il mapping della visualizzazione in corrispondenza di un indirizzo specificato. Anche se condivisibile, le pagine di archiviazione fisica usate per una visualizzazione file mappata non sono globali; non sono accessibili ai processi che non hanno eseguito il mapping di una visualizzazione del file.
Le pagine di cui è stato eseguito il commit eseguendo il mapping di una visualizzazione di un file vengono rilasciate quando l'ultimo processo con una visualizzazione dell'oggetto di mapping termina o annulla il mapping della visualizzazione chiamando la funzioneunmapViewOfFile. Al momento, il file specificato (se presente) associato all'oggetto di mapping viene aggiornato. È anche possibile forzare l'aggiornamento di un file specificato chiamando la funzioneFlushViewOfFile.
Per altre informazioni, vedere mapping di file . Per un esempio di memoria condivisa in una DLL, vedere Using Shared Memory in a Dynamic-Link Library.
Se più processi hanno accesso in scrittura alla memoria condivisa, è necessario sincronizzare l'accesso alla memoria. Per altre informazioni, vedere Synchronization.