Skip to main content
Microsoft GDK Game OS에서는 메모리 관리자의 내부 구조가 매우 다르지만, 메모리를 할당하고 관리하는 데 사용할 수 있는 API는 XBOX One ERA OS에서 사용할 수 있는 API와 매우 유사합니다(동일하지는 않음).

메모리 할당 API 계열

VirtualAlloc/VirtualFree

VirtualAllocVirtualFree는 이제 Windows PC 환경에서 이러한 API의 표준 구현과 동일합니다. 이는 메모리를 얻기 위해 이러한 API를 사용하는 기존 코드와 높은 수준의 호환성을 제공합니다. XBOX One ERA OS에서 VirtualAllocMEM_TITLE, MEM_GRAPHICS, MEM_TOOL 플래그를 통해 XBOX 관련 메모리 유형을 할당하도록 수정되었습니다. 이러한 플래그는 더 이상 지원되지 않습니다. 대신 XMemVirtualAlloc을 사용합니다.

HeapAlloc/HeapFree(및 유사 API)

Win32 힙 관련 API도 Windows PC 환경에서의 이러한 API의 표준 구현과 동일합니다. VirtualAlloc과 마찬가지로 이는 기존 코드와 높은 수준의 호환성을 제공합니다. 중요한 점은 HeapAllocHeapFree가 C 런타임/VCRuntime 라이브러리에서 malloc/new/free/delete 및 관련 C 표준 메모리 API를 구현하는 데 사용하는 API라는 점입니다. 모든 표준 Win32 힙은 최적의 성능을 제공하기 위해 백엔드 스토리지로 큰 페이지(2MB)를 사용합니다. 힙은 수신되는 할당을 충족하기 위해 각 2MB 페이지를 효율적으로 세분화하며, 4KB 페이지 기반 Win32 힙에 비해 메모리 풋프린트가 거의 증가하지 않는 결과를 낳습니다. 이는 또한 확장할 때 Win32 힙이 VirtualAlloc에 대한 비용이 많이 드는 API 호출을 해야 하는 빈도를 줄여줍니다.
XBOX One ERA OS에서 HeapAlloc은 Win32 힙을 통해 디버그/확장 메모리를 얻기 위해 HEAP_TOOL 플래그를 받아들이도록 수정되었습니다. 이 플래그는 더 이상 사용되지 않으며, 향후 Microsoft Game Development Kit(GDK) 업데이트에서 이 기능을 대체할 새 API가 제공될 것입니다.

XMemVirtualAlloc

XMemVirtualAlloc은 Microsoft Game Development Kit(GDK)용으로 생성된 새로운 API입니다. 이 API는 XBOX One ERA 환경의 MEM_TITLE, MEM_GRAPHICS, MEM_TOOL 플래그와 함께 이루어진 VirtualAlloc 호출의 사용을 대체합니다. 매개 변수와 호출 규약은 VirtualAlloc과 유사하게 일치하며, 호출자가 필요한 메모리 유형에 대해 더 자세한(XBOX 관련) 정보를 추가할 수 있는 새로운 XMemFlags 필드가 추가되었습니다.

XMemAllocatePhysicalPages/XMemMapPhysicalPages/XMemFreePhysicalPages

물리적 페이지 매핑 API를 사용하여 메모리에서 물리적 페이지의 인덱스를 얻을 수 있습니다. 이런 방식으로 페이지를 할당하면 게임이 RAM의 소유권을 완전히 제어할 수 있습니다. 반환된 페이지 번호는 필요에 따라 게임의 가상 주소 공간에 결합 및 매핑될 수 있습니다. XBOX One ERA OS와 마찬가지로 반환된 각 물리적 페이지 번호는 64KB의 RAM을 나타냅니다. 개별 페이지 또는 임의 페이지 그룹은 MEM_64K_PAGES로 생성된 적절한 예약에 매핑될 수 있습니다. 2MB 정렬된 32개 연속 페이지 그룹을 제공함으로써 2MB 예약에 매핑하는 것도 가능합니다. 페이지는 다른 페이지 보호로 여러 번 매핑될 수 있습니다. 예를 들어 하나의 매핑은 PAGE_READWRITE이고 다른 매핑은 PAGE_READONLY일 수 있습니다. 그러나 서로 다른 캐시 특성(WRITEBACK, WRITECOMBINE 또는 UNCACHED)으로 페이지를 여러 번 매핑할 수는 없습니다. 이를 시도하면 오류가 반환됩니다. 이는 XBOX One ERA에서도 불가능했지만, 시도 시 조용히 실패하여 작동하는 것처럼 보였습니다.
Microsoft GDK Game OS 가상 메모리는 Windows 메모리 시스템처럼 작동합니다. XMemVirtualAlloc을 사용하여 가상 주소 공간에서 인접한 두 주소를 할당한 다음 XMemMapPhysicalPages를 한 번 호출하여 해당 페이지를 매핑하려고 하면 동작은 정의되지 않으며 작동하지 않을 것으로 예상됩니다. 우연히 가상 주소 공간에서 서로 인접해 있더라도 메모리 시스템 관점에서는 서로 다른 할당입니다. 페이지 매핑을 해제할 때도 동일한 경우가 적용됩니다.

XMemVirtualQuery/XMemGetWorkingSetStatistics

XMemVirtualQueryXMemGetWorkingSetStatistics는 XBOX 관련 메모리 사용 세부 정보를 조사하는 데 사용할 수 있는 추가 진단 API입니다. XMemVirtualQueryVirtualQuery와 매우 유사합니다. XMemVirtualQuery는 페이지 크기와 메모리의 소유권(시스템 또는 게임)을 포함하여 VirtualQuery에서 얻을 수 없는 추가 정보를 반환합니다. XMemGetWorkingSetStatistics는 현재 사용 중인 메모리 풋프린트에 대한 정보를 반환합니다.
마지막 수정일 2026년 8월 24일