https://www.hanbit.co.kr/store/books/look.php?p_code=B2974835990
제프리 리처의 Windows via C/C++(복간판)
이 책은 윈도우 XP, 윈도우 비스타, 윈도우 서버 2008까지 내용을 포괄한다. 이미 윈도우 10이 출시된 지 오래지만 윈도우의 기본 구조는 변하지 않아 아직까지도 이 책은 윈도우 시스템 프로그래
www.hanbit.co.kr
해당 책을 읽고 학습 목적으로 간단하게 정리한 글입니다.
개요
13챕터에 이어서 가상 메모리에 대해 알기 위해 시스템 메모리 관리 정보와 프로세스 가상 정보 관련 Windows 함수를 알아보자.
시스템 정보
OS 구성 정보는 머신에 따라 달라질 수 있다.
OS구성 정보는 하드코딩 하지 않고, 프로세스 초기화마다 얻어와서 사용해야 한다.
GetSystemInfo함수를 이용하면 된다.
https://learn.microsoft.com/ko-kr/windows/win32/api/sysinfoapi/nf-sysinfoapi-getsysteminfo
GetSystemInfo 함수(sysinfoapi.h) - Win32 apps
현재 시스템에 대한 정보를 검색합니다.
learn.microsoft.com
https://learn.microsoft.com/ko-kr/windows/win32/api/sysinfoapi/ns-sysinfoapi-system_info
SYSTEM_INFO(sysinfoapi.h) - Win32 apps
현재 컴퓨터 시스템에 대한 정보를 포함합니다. 여기에는 프로세서의 아키텍처 및 유형, 시스템의 프로세서 수, 페이지 크기 및 기타 정보가 포함됩니다.
learn.microsoft.com
부팅 후 값은 결정되고 변경되지 않기 때문에 반복적으로 호출할 필요는 없다.
메모리와 연관되어있는 멤버들만 언급한다.
dwPageSize: CPU의 페이지 크기를 얻을 수 있다.
lpMinimumApplicationAddress: 프로세스가 사용할 수 있는 가장 작은 주소 값이다.
lpMaximum ApplicationAddress : 가상 큰 주소 값이다.
dwAllocationGranularity: 특정 영역을 예약할 때 사용하는 크기이다.

직접 확인해보면 위와 같은 결과를 볼 수 있다.
GetLogicalProcessorInformation을 통해 더 자세한 사항들 볼 수 있다.
WOW64: 64비트 윈도우에서 32비트 애플리케이션을 동작시킨다면 WOW64위에서 돌아간다. IsWow64Process를 통해 WOW위에서 실행되고 있는지를 확인할 수 있다.
가상 메모리 상태
GlobalMemoryStatus함수를 사용하면 메모리 상태를 확인할 수 있다.
GlobalMemoryStatus는 4GB 이하의 램 용량에서만 유효하기 때문에 GlobalMemoryStatusEx를 사용해야 한다.

MEMORYSTATUSEX구조체를 사용해 현재 나의 PC에서는 램용량이 약 32GB인 것을 확인할 수 있다.
NUMA머신에서의 메모리 관리
NUMA 머신은 CPU마다 자신의 로컬 RAM을 가져 더 빠르게 접근할 수 있는 방식입니다.
https://learn.microsoft.com/ko-kr/windows/win32/procthread/numa-support
NUMA 지원 - Win32 apps
다중 프로세서 지원을 위한 기존 모델은 대칭 SMP(다중 프로세서)입니다. 이 모델에서 각 프로세서는 메모리 및 I/O에 대해 동일하게 액세스할 수 있습니다. 더 많은 프로세서가 추가되면 프로세
learn.microsoft.com
여러 NUMA 관련 함수들을 통해 메모리를 확인할 수 있습니다.

제 CPU는 하나이기 때문에 위와 같은 결과가 나옵니다.
주소 공간의 상태 확인하기
VirtualQuery, VirtualQueryEx로 확인해볼 수 있다.
https://learn.microsoft.com/ko-kr/windows/win32/api/memoryapi/nf-memoryapi-virtualquery
VirtualQuery 함수(memoryapi.h) - Win32 apps
호출 프로세스의 가상 주소 공간에서 페이지 범위에 대한 정보를 검색합니다.
learn.microsoft.com
VirtualQueryEx는 다른 프로세스의 메모리도 검사할 수 있다.
다만 일반적으로 본인 프로세스 말고 검사할 일은 없기 때문에 VirtualQuery로 충분하다.
VirtualQuery는 MEMORY_BASIC_INFORMATION에 정보를 채워준다.
typedef struct _MEMORY_BASIC_INFORMATION {
PVOID BaseAddress;
PVOID AllocationBase;
DWORD AllocationProtect;
WORD PartitionId;
SIZE_T RegionSize;
DWORD State;
DWORD Protect;
DWORD Type;
} MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION;
https://learn.microsoft.com/ko-kr/windows/win32/api/winnt/ns-winnt-memory_basic_information
MEMORY_BASIC_INFORMATION(winnt.h) - Win32 apps
프로세스의 가상 주소 공간에 있는 페이지 범위에 대한 정보를 포함합니다.
learn.microsoft.com
'C, C++ > WINDOWS VIA C,C++' 카테고리의 다른 글
| [WINDOWS VIA C/C++] 16. 스레드 스택 (0) | 2025.11.01 |
|---|---|
| [WINDOWS VIA C/C++] 15. 애플리케이션에서 가상 메모리 사용방법 (0) | 2025.10.31 |
| [WINDOWS VIA C/C++] 13. 윈도우 메모리의 구조 (0) | 2025.10.21 |
| [WINDOWS VIA C/C++] 10. 동기 및 비동기 장치 I/O (0) | 2025.09.07 |
| [WINDOWS VIA C/C++] 08. 유저 모드에서의 스레드 동기화 (2) | 2025.08.29 |