다음을 통해 공유


MapViewOfFile3 함수(memoryapi.h)

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

통사론

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경우 시스템은 기본 주소를 선택합니다.

BaseAddress NULL않으면 제공된 모든 MEM_ADDRESS_REQUIREMENTS 모두 0으로 구성되어야 합니다.

[in] Offset

섹션 시작 부분의 오프셋입니다.

allocationType에서 MEM_LARGE_PAGES 사용되는 경우 오프셋은 GetLargePageMinimum에 64k로 정렬되거나 정렬되어야 합니다. 또한 MEM_REPLACE_PLACEHOLDER AllocationType에서 사용되는 경우 오프셋은 VirtualAlloc2에서 부여한 기본 페이지 크기에 맞게 페이지 정렬되어야 합니다.

[in] ViewSize

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

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

[in] AllocationType

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

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

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

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

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

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

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

[in] PageProtection

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

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

[in, out, optional] ExtendedParameters

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

[in] ParameterCount

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

반환 값

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

발언

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

새 할당에 이 함수를 사용하면 다음을 수행할 수 있습니다.

  • 가상 주소 공간 범위 및 2개 맞춤 제한 기능을 지정합니다.
  • 임의의 확장 매개 변수 수 지정
  • 물리적 메모리에 대한 기본 NUMA 노드를 확장 매개 변수로 지정
  • 자리 표시자 작업(특히 대체)을 지정합니다.

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

예제

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

요구 사항

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

참고 항목

VirtualAlloc2

mapViewOfFile

mapViewOfFile2

MapViewOfFileNuma2