硬件系统信息结构定义:
typedef struct _SYSTEM_INFO {
union {
DWORD dwOemId; // 这个成员已经过时,留在此处只为兼容以前的代码
struct {
WORD wProcessorArchitecture; // PROCESSOR_ARCHITECTURE_AMD64 x64 (AMD or Intel)
// PROCESSOR_ARCHITECTURE_IA64 Intel Itanium
// PROCESSOR_ARCHITECTURE_INTEL x86
// PROCESSOR_ARCHITECTURE_UNKNOWN Unknown architecture
WORD wReserved; // 保留字段
} ;
} ;
DWORD dwPageSize; // 页面大小
LPVOID lpMinimumApplicationAddress; // 应用程序可使用最低内存的地址
LPVOID lpMaximumApplicationAddress; // 应用程序可使用最高内存的地址
DWORD_PTR dwActiveProcessorMask; // 系统CPU掩码
DWORD dwNumberOfProcessors; // CPU个数
DWORD dwProcessorType; // CPU类型,过时了的成员,留在此处只为兼容
DWORD dwAllocationGranularity; // 可分配的虚拟内存起始地址粒度
WORD wProcessorLevel; // 结构无关处理器级别
WORD wProcessorRevision; // 结构无关处理器版本
}SYSTEM_INFO;
获取系统硬件信息代码:
#include <windows.h>
#include <stdio.h>
#pragma comment(lib, "user32.lib")
void main()
{
SYSTEM_INFO siSysInfo;
GetSystemInfo(&siSysInfo);
// 显示SYSTEM_INFO结构的内容
printf("硬件信息: /n");
//printf(" OEM ID: %u/n", siSysInfo.dwOemId);
// CPU数量
printf("CPU个数: %u/n", siSysInfo.dwNumberOfProcessors);
// 页面大小
printf("页面大小: %u/n", siSysInfo.dwPageSize);
// CPU型号
printf("CPU型号: %u/n", siSysInfo.dwProcessorType);
// 应用程序最低可使用地址
printf("最低可用地址: %p/n", siSysInfo.lpMinimumApplicationAddress);
// 应用程序最高可使用地址
printf("最高可用地址: %p/n", siSysInfo.lpMaximumApplicationAddress);
// 活跃CPU掩码
printf("活跃CPU掩码: %u/n", siSysInfo.dwActiveProcessorMask);
}
结果:
硬件信息:
CPU个数: 1
页面大小: 4096
CPU型号: 586
最低可用地址: 00010000
最高可用地址: 7FFEFFFF
活跃CPU掩码: 1
可见在这个系统上应用程序最多可以使用的内存是1.9999G