Поделиться через


Функция 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

См. также

Функции управления памятью

WIN32_MEMORY_RANGE_ENTRY