Функция PrefetchVirtualMemory (memoryapi.h)
Предоставляет эффективный механизм для переноса в память потенциально несогласоспособных диапазонов виртуальных адресов в адресном пространстве процесса.
Синтаксис
BOOL PrefetchVirtualMemory(
[in] HANDLE hProcess,
[in] ULONG_PTR NumberOfEntries,
[in] PWIN32_MEMORY_RANGE_ENTRY VirtualAddresses,
[in] ULONG Flags
);
Параметры
[in] hProcess
Дескриптор процесса, диапазоны виртуальных адресов которого необходимо предварительно получить. Используйте функцию GetCurrentProcess , чтобы использовать текущий процесс.
[in] NumberOfEntries
Количество записей в массиве, на которые указывает параметр VirtualAddresses .
[in] VirtualAddresses
Указатель на массив WIN32_MEMORY_RANGE_ENTRY структур, каждая из которых указывает диапазон виртуальных адресов для предварительной выборки. Диапазоны виртуальных адресов могут охватывать любую часть адресного пространства процесса, доступную целевому процессу.
[in] Flags
Зарезервировано. Должно быть равно 0.
Возвращаемое значение
Если функция выполняется успешно, возвращаемое значение будет ненулевым.
Если функция завершается сбоем, возвращается значение 0 (ноль). Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
Комментарии
Функция PrefetchVirtualMemory предназначена для приложений , которые с разумной уверенностью знают набор адресов, к которым они будут обращаться. Если вполне вероятно, что эти адреса больше не находятся в памяти (т. е. они были выгружены на диск), вызов функции PrefetchVirtualMemory для этих диапазонов адресов перед доступом позволит сократить общую задержку, так как API будет эффективно использовать эти диапазоны адресов с диска с помощью больших параллельных запросов ввода-вывода, где это возможно.
Функция PrefetchVirtualMemory позволяет приложениям эффективно использовать дисковое оборудование путем выдачи больших параллельных операций ввода-вывода, когда приложение предоставляет список диапазонов адресов процесса, к которым будет осуществляться доступ. Даже для одного диапазона адресов (например, для сопоставления файлов) функция PrefetchVirtualMemory может повысить производительность, выдавая один большой ввод-вывод, а не множество небольших операций ввода-вывода, которые будут выдаваться путем сбоя страниц.
Функция PrefetchVirtualMemory является исключительно оптимизацией производительности: предварительная выборка не требуется для доступа к целевым диапазонам адресов. Предварительно выбранная память не добавляется в рабочий набор целевого процесса; он кэшируется в физической памяти. Когда целевой процесс получит доступ к предварительно подготовленным диапазонам адресов, они будут добавлены в рабочий набор.
Так как функция PrefetchVirtualMemory никогда не может быть необходимой для правильной работы приложений, она рассматривается системой как строгое указание и подвержена обычным ограничениям физической памяти, когда она может полностью или частично завершить работу в условиях нехватки памяти. Это также может создать нехватку памяти при вызове с большими диапазонами адресов, поэтому приложения должны предварительно получать только диапазоны адресов, которые они будут использовать.
Чтобы скомпилировать приложение, которое вызывает эту функцию, определите _WIN32_WINNTкак _WIN32_WINNT_WIN8 или выше. Дополнительные сведения см. в разделе Использование заголовков Windows.
Требования
Минимальная версия клиента | Windows 8 [только классические приложения] |
Минимальная версия сервера | Windows Server 2012 [только классические приложения] |
Целевая платформа | Windows |
Header | memoryapi.h (включая Windows.h, Memoryapi.h) |
Библиотека | onecore.lib |
DLL | Kernel32.dll |