Funzione PrefetchVirtualMemory (memoryapi.h)

Fornisce un meccanismo efficiente per inserire nella memoria intervalli di indirizzi virtuali potenzialmente non contigui in uno spazio indirizzi del processo.

Sintassi

BOOL PrefetchVirtualMemory(
  [in] HANDLE                    hProcess,
  [in] ULONG_PTR                 NumberOfEntries,
  [in] PWIN32_MEMORY_RANGE_ENTRY VirtualAddresses,
  [in] ULONG                     Flags
);

Parametri

[in] hProcess

Handle per il processo i cui intervalli di indirizzi virtuali devono essere prelettura. Usare la funzione GetCurrentProcess per usare il processo corrente.

[in] NumberOfEntries

Numero di voci nella matrice a cui punta il parametro VirtualAddresses .

[in] VirtualAddresses

Puntatore a una matrice di strutture WIN32_MEMORY_RANGE_ENTRY che specificano un intervallo di indirizzi virtuali da prelettura. Gli intervalli di indirizzi virtuali possono coprire qualsiasi parte dello spazio indirizzi del processo accessibile dal processo di destinazione.

[in] Flags

Riservato. Deve essere 0.

Valore restituito

Se la funzione ha esito positivo, il valore restituito è un valore diverso da zero.

Se la funzione ha esito negativo, il valore restituito è 0 (zero). Per informazioni dettagliate sull'errore, chiamare GetLastError.

Commenti

La funzione PrefetchVirtualMemory è destinata alle applicazioni che conoscono con ragionevole attendibilità il set di indirizzi a cui accederanno. Se è probabile che questi indirizzi non si trovino più nella memoria (ad esempio, sono stati caricati su disco), chiamando la funzione PrefetchVirtualMemory su tali intervalli di indirizzi prima che l'accesso ridurrà la latenza complessiva perché l'API porterà in modo efficiente tali intervalli di indirizzi dal disco usando richieste di I/O simultanee di grandi dimensioni, se possibile.

La funzione PrefetchVirtualMemory consente alle applicazioni di usare in modo efficiente l'hardware del disco eseguendo operazioni di I/O simultanee di grandi dimensioni, se possibile, quando l'applicazione fornisce un elenco di intervalli di indirizzi del processo a cui si accede. Anche per un singolo intervallo di indirizzi (ad esempio, un mapping di file), la funzione PrefetchVirtualMemory può offrire miglioramenti delle prestazioni eseguendo un singolo I/O di grandi dimensioni anziché il numero più piccolo di I/O che verrebbe generato tramite errori di pagina.

La funzione PrefetchVirtualMemory è puramente un'ottimizzazione delle prestazioni: la prelettura non è necessaria per accedere agli intervalli di indirizzi di destinazione. La memoria prelettura non viene aggiunta al working set del processo di destinazione; viene memorizzato nella cache nella memoria fisica. Quando gli intervalli di indirizzi prelettura sono accessibili dal processo di destinazione, verranno aggiunti al working set.

Poiché la funzione PrefetchVirtualMemory non può mai essere necessaria per il corretto funzionamento delle applicazioni, viene considerata come un suggerimento sicuro dal sistema ed è soggetta ai soliti vincoli di memoria fisica in cui può essere completamente o parzialmente negativo in condizioni di memoria insufficiente. Può anche creare un utilizzo elevato della memoria se chiamato con intervalli di indirizzi di grandi dimensioni, quindi le applicazioni devono eseguire il prelettura degli intervalli di indirizzi che useranno effettivamente.

Per compilare un'applicazione che chiama questa funzione, definire _WIN32_WINNT come _WIN32_WINNT_WIN8 o versione successiva. Per altre informazioni, vedere Uso delle intestazioni di Windows.

Requisiti

   
Client minimo supportato Windows 8 [solo app desktop]
Server minimo supportato Windows Server 2012 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione memoryapi.h (include Windows.h, Memoryapi.h)
Libreria onecore.lib
DLL Kernel32.dll

Vedere anche

Funzioni di gestione della memoria

WIN32_MEMORY_RANGE_ENTRY