Função PrefetchVirtualMemory (memoryapi.h)
Fornece um mecanismo eficiente para trazer para a memória intervalos de endereços virtuais potencialmente descontínuos em um espaço de endereço de processo.
Sintaxe
BOOL PrefetchVirtualMemory(
[in] HANDLE hProcess,
[in] ULONG_PTR NumberOfEntries,
[in] PWIN32_MEMORY_RANGE_ENTRY VirtualAddresses,
[in] ULONG Flags
);
Parâmetros
[in] hProcess
Manipule para o processo cujos intervalos de endereços virtuais devem ser pré-buscados. Use a função GetCurrentProcess para usar o processo atual.
[in] NumberOfEntries
Número de entradas na matriz apontada pelo parâmetro VirtualAddresses .
[in] VirtualAddresses
Ponteiro para uma matriz de estruturas de WIN32_MEMORY_RANGE_ENTRY que cada uma especifica um intervalo de endereços virtuais a ser pré-buscado. Os intervalos de endereços virtuais podem abranger qualquer parte do espaço de endereço do processo acessível pelo processo de destino.
[in] Flags
Reservado. Deve ser 0.
Retornar valor
Se a função for bem-sucedida, o valor retornado será um valor diferente de zero.
Se a função falhar, o valor retornado será zero (0). Para obter informações de erro estendidas, chame GetLastError.
Comentários
A função PrefetchVirtualMemory é direcionada a aplicativos que sabem com confiança razoável o conjunto de endereços que eles acessarão. Se for provável que esses endereços não sejam mais residentes na memória (ou seja, eles foram paginados para o disco), chamar a função PrefetchVirtualMemory nesses intervalos de endereços antes do acesso reduzirá a latência geral, pois a API trará com eficiência esses intervalos de endereços do disco usando solicitações de E/S grandes e simultâneas sempre que possível.
A função PrefetchVirtualMemory permite que os aplicativos façam uso eficiente do hardware de disco emitindo E/S grandes e simultâneas sempre que possível quando o aplicativo fornece uma lista de intervalos de endereços de processo que serão acessados. Mesmo para um único intervalo de endereços (por exemplo, um mapeamento de arquivo), a função PrefetchVirtualMemory pode fornecer melhorias de desempenho emitindo uma única E/S grande em vez de muitas E/S menores que seriam emitidas por meio de falhas de página.
A função PrefetchVirtualMemory é puramente uma otimização de desempenho: a pré-busca não é necessária para acessar os intervalos de endereços de destino. A memória pré-buscada não é adicionada ao conjunto de trabalho do processo de destino; ele é armazenado em cache na memória física. Quando os intervalos de endereços pré-buscados forem acessados pelo processo de destino, eles serão adicionados ao conjunto de trabalho.
Como a função PrefetchVirtualMemory nunca pode ser necessária para a operação correta de aplicativos, ela é tratada como uma forte dica pelo sistema e está sujeita a restrições habituais de memória física em que pode falhar completamente ou parcialmente em condições de baixa memória. Ele também pode criar pressão de memória se chamado com grandes intervalos de endereços, portanto, os aplicativos devem apenas pré-buscar intervalos de endereços que eles realmente usarão.
Para compilar um aplicativo que chama essa função, defina _WIN32_WINNT como _WIN32_WINNT_WIN8 ou superior. Para obter mais informações, consulte Usando os cabeçalhos do Windows.
Requisitos
Cliente mínimo com suporte | Windows 8 [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2012 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | memoryapi.h (inclua Windows.h, Memoryapi.h) |
Biblioteca | onecore.lib |
DLL | Kernel32.dll |