基本概念
GetSystemInfo是Windows API函数,用于获取当前运行环境的核心系统信息,包括处理器架构、CPU核心数、内存分页大小、系统地址空间范围等关键硬件与操作系统配置数据。它是开发Windows系统工具、硬件检测软件或需要适配不同系统环境的应用程序时的常用接口。
基本语法
1 2 3
| void GetSystemInfo( [out] LPSYSTEM_INFO lpSystemInfo );
|
LPSYSTEM_INFO
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| typedef struct _SYSTEM_INFO { union { DWORD dwOemId; struct { WORD wProcessorArchitecture; WORD wReserved; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME;
DWORD dwPageSize; LPVOID lpMinimumApplicationAddress; LPVOID lpMaximumApplicationAddress; DWORD_PTR dwActiveProcessorMask;
DWORD dwNumberOfProcessors; DWORD dwProcessorType; DWORD dwAllocationGranularity; WORD wProcessorLevel; WORD wProcessorRevision; } SYSTEM_INFO, *LPSYSTEM_INFO;
DWORD_PTR: 本质是一个 “动态宽度” 的无符号整数,其位数随系统架构自动调整: 在 32 位系统 中,它等价于 DWORD(32 位无符号整数); 在 64 位系统 中,它等价于 QWORD(64 位无符号整数)。
|
简单示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| #include <windows.h> #include <stdio.h>
int main() { SYSTEM_INFO sysInfo; GetSystemInfo(&sysInfo);
printf("=== 系统信息(通过GetSystemInfo获取) ===\n"); const char* archStr = nullptr; switch (sysInfo.wProcessorArchitecture) { case PROCESSOR_ARCHITECTURE_INTEL: archStr = "x86 (32位)"; break; case PROCESSOR_ARCHITECTURE_AMD64: archStr = "x64 (64位)"; break; case PROCESSOR_ARCHITECTURE_ARM64: archStr = "ARM64 (64位)"; break; default: archStr = "未知架构"; break; } printf("处理器架构:%s\n", archStr);
printf("逻辑处理器数:%lu\n", sysInfo.dwNumberOfProcessors);
printf("内存分页大小:%lu 字节(%lu KB)\n", sysInfo.dwPageSize, sysInfo.dwPageSize / 1024); printf("内存分配粒度:%lu 字节(%lu KB)\n", sysInfo.dwAllocationGranularity, sysInfo.dwAllocationGranularity / 1024);
printf("应用程序最低地址:0x%p\n", sysInfo.lpMinimumApplicationAddress); printf("应用程序最高地址:0x%p\n", sysInfo.lpMaximumApplicationAddress);
return 0; }
|