Partager via


PrefetchVirtualMemory, fonction (memoryapi.h)

Fournit un mécanisme efficace pour mettre en mémoire des plages d’adresses virtuelles potentiellement discontiguantes dans un espace d’adressage de processus.

Syntaxe

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

Paramètres

[in] hProcess

Gérez le processus dont les plages d’adresses virtuelles doivent être prérécupérées. Utilisez la fonction GetCurrentProcess pour utiliser le processus actuel.

[in] NumberOfEntries

Nombre d’entrées dans le tableau vers lesquelles pointe le paramètre VirtualAddresses .

[in] VirtualAddresses

Pointeur vers un tableau de structures WIN32_MEMORY_RANGE_ENTRY qui spécifient chacune une plage d’adresses virtuelle à prérécupérer. Les plages d’adresses virtuelles peuvent couvrir n’importe quelle partie de l’espace d’adressage du processus accessible par le processus cible.

[in] Flags

Réservé. Doit être égal à 0.

Valeur retournée

Si la fonction réussit, la valeur de retour est une valeur différente de zéro.

Si la fonction échoue, la valeur de retour est zéro (0). Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.

Notes

La fonction PrefetchVirtualMemory est destinée aux applications qui connaissent avec une confiance raisonnable l’ensemble des adresses auxquelles elles accèderont. S’il est probable que ces adresses ne résident plus en mémoire (c’est-à-dire qu’elles ont été paginées sur le disque), l’appel de la fonction PrefetchVirtualMemory sur ces plages d’adresses avant l’accès réduit la latence globale, car l’API permet d’intégrer efficacement ces plages d’adresses à partir du disque à l’aide de demandes d’E/S simultanées volumineuses dans la mesure du possible.

La fonction PrefetchVirtualMemory permet aux applications d’utiliser efficacement le matériel disque en émettant des E/S simultanées volumineuses lorsque cela est possible lorsque l’application fournit une liste de plages d’adresses de processus accessibles. Même pour une plage d’adresses unique (par exemple, un mappage de fichiers), la fonction PrefetchVirtualMemory peut améliorer les performances en émettant une seule grande E/S plutôt que les nombreuses E/S plus petites qui seraient émises en cas d’erreur de page.

La fonction PrefetchVirtualMemory est purement une optimisation des performances : le prérécupération n’est pas nécessaire pour accéder aux plages d’adresses cibles. La mémoire prérécupérée n’est pas ajoutée au jeu de travail du processus cible ; il est mis en cache dans la mémoire physique. Lorsque les plages d’adresses prérécupérées sont accessibles par le processus cible, elles sont ajoutées au jeu de travail.

Étant donné que la fonction PrefetchVirtualMemory ne peut jamais être nécessaire pour le bon fonctionnement des applications, elle est traitée comme un indicateur fort par le système et est soumise à des contraintes de mémoire physique habituelles où elle peut complètement ou partiellement échouer dans des conditions de mémoire faible. Il peut également créer une pression de la mémoire si elle est appelée avec de grandes plages d’adresses, de sorte que les applications ne doivent prérécupérer que les plages d’adresses qu’elles utiliseront réellement.

Pour compiler une application qui appelle cette fonction, définissez _WIN32_WINNT comme _WIN32_WINNT_WIN8 ou une version ultérieure. Pour plus d’informations, consultez Utilisation des en-têtes Windows.

Configuration requise

   
Client minimal pris en charge Windows 8 [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2012 [applications de bureau uniquement]
Plateforme cible Windows
En-tête memoryapi.h (inclure Windows.h, Memoryapi.h)
Bibliothèque onecore.lib
DLL Kernel32.dll

Voir aussi

Fonctions de gestion de la mémoire

WIN32_MEMORY_RANGE_ENTRY