Share via


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이 아닌 값입니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

PrefetchVirtualMemory 함수는 액세스할 주소 집합을 합리적으로 알고 있는 애플리케이션을 대상으로 합니다. 이러한 주소가 메모리에 더 이상 상주하지 않을 가능성이 있는 경우(즉, 디스크로 페이징된 경우) 액세스 전에 해당 주소 범위에서 PrefetchVirtualMemory 함수를 호출하면 API가 가능한 경우 큰 동시 I/O 요청을 사용하여 디스크에서 해당 주소 범위를 효율적으로 가져오기 때문에 전체 대기 시간이 줄어듭니다.

PrefetchVirtualMemory 함수를 사용하면 애플리케이션이 액세스할 프로세스 주소 범위 목록을 제공하는 경우 가능한 경우 대규모 동시 I/O를 실행하여 애플리케이션에서 디스크 하드웨어를 효율적으로 사용할 수 있습니다. 단일 주소 범위(예: 파일 매핑)의 경우에도 PrefetchVirtualMemory 함수는 페이지 오류를 통해 발급되는 많은 작은 I/O가 아닌 단일 큰 I/O를 실행하여 성능 향상을 제공할 수 있습니다.

PrefetchVirtualMemory 함수는 순전히 성능 최적화입니다. 대상 주소 범위에 액세스하는 데 프리페치할 필요가 없습니다. 프리페치된 메모리는 대상 프로세스의 작업 집합에 추가되지 않습니다. 실제 메모리에 캐시됩니다. 대상 프로세스에서 프리페치된 주소 범위에 액세스하면 작업 집합에 추가됩니다.

PrefetchVirtualMemory 함수는 애플리케이션의 올바른 작업에는 필요하지 않으므로 시스템에서 강력한 힌트로 처리되며 메모리 부족 조건에서 완전히 또는 부분적으로 실패할 수 있는 일반적인 물리적 메모리 제약 조건이 적용됩니다. 또한 큰 주소 범위로 호출되는 경우 메모리 압력이 발생할 수 있으므로 애플리케이션은 실제로 사용할 주소 범위만 프리페치해야 합니다.

이 함수를 호출하는 애플리케이션을 컴파일하려면 _WIN32_WINNT _WIN32_WINNT_WIN8 이상으로 정의합니다. 자세한 내용은 Windows 헤더 사용을 참조하세요.

요구 사항

   
지원되는 최소 클라이언트 Windows 8 [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2012 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 memoryapi.h(Windows.h, Memoryapi.h 포함)
라이브러리 onecore.lib
DLL Kernel32.dll

참고 항목

메모리 관리 함수

WIN32_MEMORY_RANGE_ENTRY