Funzione MapViewOfFile3 (memoryapi.h)
Esegue il mapping di una visualizzazione di un file o di una sezione basata su file di pagina nello spazio indirizzi del processo specificato.
Usando questa funzione, è possibile: per le nuove allocazioni, specificare un intervallo di spazio indirizzi virtuale e una restrizione di allineamento power-of-2; specificare un numero arbitrario di parametri estesi; specificare un nodo NUMA preferito per la memoria fisica come parametro esteso; e specificare un'operazione segnaposto (in particolare, sostituzione).
Per specificare il nodo NUMA, vedere il parametro ExtendedParameters .
Sintassi
PVOID MapViewOfFile3(
[in] HANDLE FileMapping,
[in] HANDLE Process,
[in, optional] PVOID BaseAddress,
[in] ULONG64 Offset,
[in] SIZE_T ViewSize,
[in] ULONG AllocationType,
[in] ULONG PageProtection,
[in, out, optional] MEM_EXTENDED_PARAMETER *ExtendedParameters,
[in] ULONG ParameterCount
);
Parametri
[in] FileMapping
Handle a una sezione di cui eseguire il mapping nello spazio degli indirizzi del processo specificato.
[in] Process
Handle a un processo in cui verrà eseguito il mapping della sezione.
[in, optional] BaseAddress
Indirizzo di base desiderato della visualizzazione. L'indirizzo viene arrotondato per difetto al limite di 64k più vicino.
Nota
Se questo parametro è NULL, il sistema seleziona l'indirizzo di base.
Se BaseAddress non è NULL, qualsiasi MEM_ADDRESS_REQUIREMENTS specificato deve essere costituito da tutti gli zeri.
[in] Offset
Offset dall'inizio della sezione. Deve essere allineato a 64.000.
[in] ViewSize
Numero di byte di cui eseguire il mapping. Il valore zero (0) specifica che è necessario eseguire il mapping dell'intera sezione.
Le dimensioni devono essere sempre un multiplo delle dimensioni della pagina.
[in] AllocationType
Tipo di allocazione di memoria. Questo parametro può essere zero (0) o uno dei valori seguenti.
Valore | Significato |
---|---|
|
Esegue il mapping di una visualizzazione riservata. |
|
Sostituisce un segnaposto con una visualizzazione mappata. Sono supportate solo le visualizzazioni di sezione basate su dati/pf (nessuna immagine, memoria fisica e così via). Quando si sostituisce un segnaposto, BaseAddress e ViewSize devono corrispondere esattamente a quelli del segnaposto e qualsiasi struttura MEM_ADDRESS_REQUIREMENTS fornita deve essere costituita da tutti gli zeri.
Dopo aver sostituito un segnaposto con una visualizzazione mappata, per liberare la visualizzazione mappata a un segnaposto, vedere il parametro UnmapFlags di UnmapViewOfFileEx e UnmapViewOfFile2. Un segnaposto è un tipo di area di memoria riservata. I requisiti di allineamento 64k in Offset e BaseAddress non si applicano quando questo flag viene specificato. |
|
Esegue il mapping di una visualizzazione pagina di grandi dimensioni. Questo flag specifica che la visualizzazione deve essere mappata usando il supporto di pagine di grandi dimensioni. Le dimensioni della visualizzazione devono essere multiple delle dimensioni di una pagina di grandi dimensioni segnalate dalla funzione GetLargePageMinimum e l'oggetto di mapping dei file deve essere stato creato usando l'opzione SEC_LARGE_PAGES . Se si specifica un valore non Null per il parametro BaseAddress , il valore deve essere un multiplo di GetLargePageMinimum. |
[in] PageProtection
Protezione della pagina desiderata.
Per gli oggetti di mapping di file creati con l'attributo SEC_IMAGE , il parametro PageProtection non ha alcun effetto e deve essere impostato su qualsiasi valore valido, ad esempio PAGE_READONLY.
[in, out, optional] ExtendedParameters
Puntatore facoltativo a uno o più parametri estesi di tipo MEM_EXTENDED_PARAMETER. Ognuno di questi valori di parametro estesi può avere un campo Type di MemExtendedParameterAddressRequirements o MemExtendedParameterNumaNode. Se non viene fornito alcun parametro esteso MemExtendedParameterNumaNode , il comportamento corrisponde a quello delle funzioni VirtualAlloc/MapViewOfFile , ovvero il nodo NUMA preferito per le pagine fisiche viene determinato in base al processore ideale del thread che accede prima alla memoria.
[in] ParameterCount
Numero di parametri estesi a cui punta ExtendedParameters.
Valore restituito
Restituisce l'indirizzo di base della visualizzazione mappata, se ha esito positivo. In caso contrario, restituisce NULL e lo stato di errore esteso è disponibile tramite GetLastError.
Commenti
Questa API consente di supportare giochi ad alte prestazioni e applicazioni server, che hanno requisiti specifici per la gestione dello spazio indirizzi virtuale. Ad esempio, il mapping della memoria sopra un'area riservata in precedenza; ciò è utile per l'implementazione di un buffer circolare di wrapping automatico. E allocare memoria con allineamento specifico; Ad esempio, per consentire all'applicazione di eseguire il commit su richiesta di aree mappate a pagine di grandi dimensioni o enormi.
Esempio
Per un esempio di codice, vedere Scenario 1 in VirtualAlloc2.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 10 versione 1803 [solo app desktop] |
Server minimo supportato | Windows Server 2016 [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | memoryapi.h (include Windows.h) |
Libreria | onecore.lib |
DLL | Kernel32.dll |
Vedere anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: nel corso del 2024 verranno dismessi i problemi di GitHub come meccanismo di feedback per il contenuto e verranno sostituiti con un nuovo sistema di feedback. Per altre informazioni, vedere:Invia e visualizza il feedback per