Share via


MapViewOfFile3 함수(memoryapi.h)

파일 또는 페이지 파일 기반 섹션의 보기를 지정된 프로세스의 주소 공간에 매핑합니다.

이 함수를 사용하면 다음을 수행할 수 있습니다. 새 할당의 경우 가상 주소 공간의 범위와 2의 강력한 맞춤 제한을 지정할 수 있습니다. 임의의 수의 확장 매개 변수를 지정합니다. 물리적 메모리에 대한 기본 NUMA 노드를 확장 매개 변수로 지정합니다. 및 는 자리 표시자 작업(특히 대체)을 지정합니다.

NUMA 노드를 지정하려면 ExtendedParameters 매개 변수를 참조하세요.

구문

PVOID MapViewOfFile3(
  [in]                HANDLE                 FileMapping,
  [in]                HANDLE                 Process,
  [in, optional]      PVOID                  BaseAddress,
  [in]                ULONG64                Offset,
  [in]                SIZE_T                 ViewSize,
  [in]                ULONG                  AllocationType,
  [in]                ULONG                  PageProtection,
  [in, out, optional] MEM_EXTENDED_PARAMETER *ExtendedParameters,
  [in]                ULONG                  ParameterCount
);

매개 변수

[in] FileMapping

지정된 프로세스의 주소 공간에 매핑할 섹션에 대한 HANDLE 입니다.

[in] Process

섹션을 매핑할 프로세스에 대한 HANDLE 입니다.

[in, optional] BaseAddress

뷰의 원하는 기본 주소입니다. 주소는 가장 가까운 64k 경계로 반올림됩니다.

참고

이 매개 변수가 NULL이면 시스템에서 기본 주소를 선택합니다.

BaseAddressNULL이 아니면 제공된 모든 MEM_ADDRESS_REQUIREMENTS 모든 0으로 구성되어야 합니다.

[in] Offset

섹션 시작 부분의 오프셋입니다. 64k 정렬되어야 합니다.

[in] ViewSize

매핑할 바이트 수입니다. 값 0은 전체 섹션을 매핑하도록 지정합니다.

크기는 항상 페이지 크기의 배수여야 합니다.

[in] AllocationType

메모리 할당 유형입니다. 이 매개 변수는 0 또는 다음 값 중 하나일 수 있습니다.

의미
MEM_RESERVE
0x00002000
예약된 보기를 매핑합니다.
MEM_REPLACE_PLACEHOLDER
0x00004000
자리 표시자를 매핑된 보기로 바꿉니다. 데이터/pf 지원 섹션 보기만 지원됩니다(이미지, 실제 메모리 등은 지원되지 않음). 자리 표시자를 바꿀 때 BaseAddressViewSize 는 자리 표시자의 개체 틀과 정확히 일치해야 하며 제공된 모든 MEM_ADDRESS_REQUIREMENTS 구조체는 모두 0으로 구성되어야 합니다.

자리 표시자를 매핑된 보기로 바꾼 후 매핑된 보기를 자리 표시자로 다시 해제하려면 UnmapViewOfFileEx 및 UnmapViewOfFile2UnmapFlags 매개 변수를 참조하세요.

자리 표시자는 예약된 메모리 영역의 유형입니다.

Offset BaseAddress 의 64k 맞춤 요구 사항은 이 플래그를 지정할 때 적용되지 않습니다.

MEM_LARGE_PAGES
0x20000000
큰 페이지 보기를 매핑합니다. 이 플래그는 큰 페이지 지원을 사용하여 뷰를 매핑해야 한다고 지정합니다. 보기의 크기는 GetLargePageMinimum 함수에서 보고하는 큰 페이지 크기의 배수여야 하며 파일 매핑 개체는 SEC_LARGE_PAGES 옵션을 사용하여 만들어야 합니다. BaseAddress 매개 변수에 null이 아닌 값을 제공하는 경우 값은 GetLargePageMinimum의 배수여야 합니다.

[in] PageProtection

원하는 페이지 보호입니다.

SEC_IMAGE 특성으로 만든 파일 매핑 개체의 경우 PageProtection 매개 변수는 효과가 없으며 PAGE_READONLY 같은 유효한 값으로 설정해야 합니다.

[in, out, optional] ExtendedParameters

MEM_EXTENDED_PARAMETER 형식의 확장 매개 변수 하나 이상에 대한 선택적 포인터입니다. 이러한 각 확장 매개 변수 값 자체에는 MemExtendedParameterAddressRequirements 또는 MemExtendedParameterNumaNode형식 필드가 있을 수 있습니다. MemExtendedParameterNumaNode 확장 매개 변수가 제공되지 않으면 동작은 VirtualAlloc/MapViewOfFile 함수와 동일합니다(즉, 실제 페이지에 대한 기본 NUMA 노드는 먼저 메모리에 액세스하는 스레드의 이상적인 프로세서에 따라 결정됨).

[in] ParameterCount

ExtendedParameters가 가리키는 확장 매개 변수 수입니다.

반환 값

성공한 경우 매핑된 뷰의 기본 주소를 반환합니다. 그렇지 않으면 GetLastError를 사용하여 사용할 수 상태 NULL 및 확장 오류를 반환합니다.

설명

이 API는 가상 주소 공간 관리에 대한 특정 요구 사항이 있는 고성능 게임 및 서버 애플리케이션을 지원하는 데 도움이 됩니다. 예를 들어 이전에 예약된 지역 위에 메모리를 매핑합니다. 이는 자동으로 래핑 링 버퍼를 구현하는 데 유용합니다. 그리고 특정 맞춤으로 메모리를 할당; 예를 들어 애플리케이션이 요청 시 큰/거대한 페이지 매핑 지역을 커밋할 수 있도록 합니다.

예제

코드 예제는 VirtualAlloc2의 시나리오 1을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 10 버전 1803 [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2016 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 memoryapi.h(Windows.h 포함)
라이브러리 onecore.lib
DLL Kernel32.dll

참고 항목

VirtualAlloc2

MapViewOfFile

MapViewOfFile2

MapViewOfFileNuma2