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이면 시스템에서 기본 주소를 선택합니다.
BaseAddress가 NULL이 아니면 제공된 모든 MEM_ADDRESS_REQUIREMENTS 모든 0으로 구성되어야 합니다.
[in] Offset
섹션 시작 부분의 오프셋입니다. 64k 정렬되어야 합니다.
[in] ViewSize
매핑할 바이트 수입니다. 값 0은 전체 섹션을 매핑하도록 지정합니다.
크기는 항상 페이지 크기의 배수여야 합니다.
[in] AllocationType
메모리 할당 유형입니다. 이 매개 변수는 0 또는 다음 값 중 하나일 수 있습니다.
값 | 의미 |
---|---|
|
예약된 보기를 매핑합니다. |
|
자리 표시자를 매핑된 보기로 바꿉니다. 데이터/pf 지원 섹션 보기만 지원됩니다(이미지, 실제 메모리 등은 지원되지 않음). 자리 표시자를 바꿀 때 BaseAddress 및 ViewSize 는 자리 표시자의 개체 틀과 정확히 일치해야 하며 제공된 모든 MEM_ADDRESS_REQUIREMENTS 구조체는 모두 0으로 구성되어야 합니다.
자리 표시자를 매핑된 보기로 바꾼 후 매핑된 보기를 자리 표시자로 다시 해제하려면 UnmapViewOfFileEx 및 UnmapViewOfFile2의 UnmapFlags 매개 변수를 참조하세요. 자리 표시자는 예약된 메모리 영역의 유형입니다. Offset 및BaseAddress 의 64k 맞춤 요구 사항은 이 플래그를 지정할 때 적용되지 않습니다. |
|
큰 페이지 보기를 매핑합니다. 이 플래그는 큰 페이지 지원을 사용하여 뷰를 매핑해야 한다고 지정합니다. 보기의 크기는 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 |
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기