Compartir a través de


Función PrefetchVirtualMemory (memoryapi.h)

Proporciona un mecanismo eficaz para incorporar en memoria intervalos de direcciones virtuales potencialmente desconcertantes en un espacio de direcciones de proceso.

Sintaxis

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

Parámetros

[in] hProcess

Controle el proceso cuyos intervalos de direcciones virtuales se van a capturar previamente. Use la función GetCurrentProcess para usar el proceso actual.

[in] NumberOfEntries

Número de entradas de la matriz a las que apunta el parámetro VirtualAddresses .

[in] VirtualAddresses

Puntero a una matriz de estructuras de WIN32_MEMORY_RANGE_ENTRY que cada una especifica un intervalo de direcciones virtuales que se va a capturar previamente. Los intervalos de direcciones virtuales pueden cubrir cualquier parte del espacio de direcciones del proceso accesible por el proceso de destino.

[in] Flags

Reservado. Debe ser 0.

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto es un valor distinto de cero.

Si la función no se realiza correctamente, el valor devuelto es 0 (cero). Para obtener información de error extendida, llame a GetLastError.

Comentarios

La función PrefetchVirtualMemory está destinada a aplicaciones que saben con confianza razonable el conjunto de direcciones a las que accederán. Si es probable que estas direcciones ya no residan en la memoria (es decir, se han paginado en el disco), llamar a la función PrefetchVirtualMemory en esos intervalos de direcciones antes de que el acceso reduzca la latencia general, ya que la API incorporará eficazmente esos intervalos de direcciones desde el disco mediante solicitudes de E/S simultáneas grandes siempre que sea posible.

La función PrefetchVirtualMemory permite a las aplicaciones hacer un uso eficaz del hardware del disco mediante la emisión de E/S simultáneas grandes siempre que sea posible cuando la aplicación proporciona una lista de intervalos de direcciones de proceso a los que se va a acceder. Incluso para un único intervalo de direcciones (por ejemplo, una asignación de archivos), la función PrefetchVirtualMemory puede proporcionar mejoras de rendimiento mediante la emisión de una única E/S grande en lugar de las muchas E/S más pequeñas que se emitirían a través de errores de página.

La función PrefetchVirtualMemory es simplemente una optimización del rendimiento: la captura previa no es necesaria para acceder a los intervalos de direcciones de destino. La memoria capturada previamente no se agrega al espacio de trabajo del proceso de destino; se almacena en caché en memoria física. Cuando el proceso de destino tenga acceso a los intervalos de direcciones previamente capturados, se agregarán al conjunto de trabajo.

Puesto que la función PrefetchVirtualMemory nunca puede ser necesaria para el funcionamiento correcto de las aplicaciones, se trata como una sugerencia fuerte por parte del sistema y está sujeta a restricciones de memoria física habituales en las que puede producir un error total o parcial en condiciones de memoria baja. También puede crear presión de memoria si se llama con intervalos de direcciones grandes, por lo que las aplicaciones solo deben capturar previamente los intervalos de direcciones que realmente usarán.

Para compilar una aplicación que llama a esta función, defina _WIN32_WINNT como _WIN32_WINNT_WIN8 o superior. Para obtener más información, vea Usar los encabezados de Windows.

Requisitos

   
Cliente mínimo compatible Windows 8 [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2012 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado memoryapi.h (incluye Windows.h, Memoryapi.h)
Library onecore.lib
Archivo DLL Kernel32.dll

Consulte también

Funciones de administración de memoria

WIN32_MEMORY_RANGE_ENTRY