马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 无符号整形 于 2016-9-18 21:17 编辑
这个函数可以获取系统信息,如果程序运行在WOW64上请调用GetNativeSystemInfo函数
好了废话不多说,给出原型:void WINAPI GetSystemInfo(
_Out_ LPSYSTEM_INFO lpSystemInfo
);
lpSystemInfo:一个指向SYSTEM_INFO的指针,用于获取信息。
嘿嘿微软又在绕圈圈,给出SYSTEM_INFO的成员列表:typedef struct _SYSTEM_INFO {
union {
DWORD dwOemId;
struct {
WORD wProcessorArchitecture;
WORD wReserved;
};
};
DWORD dwPageSize;
LPVOID lpMinimumApplicationAddress;
LPVOID lpMaximumApplicationAddress;
DWORD_PTR dwActiveProcessorMask;
DWORD dwNumberOfProcessors;
DWORD dwProcessorType;
DWORD dwAllocationGranularity;
WORD wProcessorLevel;
WORD wProcessorRevision;
} SYSTEM_INFO;
dwOemls:为了保留兼容性的过时成员,应用程序应该使用wProcessorArchitecture成员。
wProcessorArchitecture:作系统的处理器体系结构,此成员可以是下列值之一。
值 | 含义 | PROCESSOR_ARCHITECTURE_AMD64
9 | 64位(AMD或者英特尔) | PROCESSOR_ARCHITECTURE_ARM
5 | ARM | PROCESSOR_ARCHITECTURE_IA64
6 | 英特尔(基于Itanium) | PROCESSOR_ARCHITECTURE_INTEL
0 | x86 | PROCESSOR_ARCHITECTURE_UNKNOWN
65535 | 未知体系 |
wReserved:此成员保留为未来使用。
dwPageSize:页面大小,这是VirtualAlloc函数使用的页面大小。
lpMinimumApplicationAddress :指向一个指针应用程序和动态链接库可以访问的最低内存地址。
lpMaximumApplicationAddress :指向一个指针应用程序和动态链接库可以访问的最高的内存地址。
dwActiveProcessorMask:系统中的处理器的一组掩码。(二进制的位)第0位是处理器0的掩码,第1位是处理器1的掩码,以此类推,第31位是处理器31的掩码。
dwNumberOfProcessors:当前组中的逻辑处理器的数量(如果你的电脑不是NUMA架构的值的话就是逻辑处理器数量)如果需要检索该值,请调用GetLogicalProcessorInformation函数。
注意:实际上这个并不是物理处理器数量。大家都听说过英特尔的超线程技术吧?他能把少一点的CPU虚拟成更多的CPU!!如果要获得虚拟CPU共享的物理CPU请调用GetLogicalProcessorInformationEx函数。
dwProcessorType:为了保留兼容性的过时成员,应用程序应使用wProcessorArchitecture, wProcessorLevel和wProcessorRevision成员获取CPU类型。
可能有以下值。
PROCESSOR_INTEL_386 (386)
PROCESSOR_INTEL_486 (486)
PROCESSOR_INTEL_PENTIUM (586)
PROCESSOR_INTEL_IA64 (2200)
PROCESSOR_AMD_X8664 (8664)
PROCESSOR_ARM (保留)
dwAllocationGranularity:可以分配内存空间(虚拟内存)起始地址的粒度。
wProcessorLevel:系统体系结构所依赖的处理器级别。它只用于显示,如果要想确定一个处理器的功能,请使用IsProcessorFeaturePresent函数。
如果wProcessorArchitecture是PROCESSOR_ARCHITECTURE_INTEL,则wProcessorLevel由CPU厂商定义。
如果wProcessorArchitecture是PROCESSOR_ARCHITECTURE_IA64,则wProcessorLevel为1。
wProcessorRevision:系统体系结构所依赖的处理器修订版本号。
值 | 含义 | Intel Pentium, Cyrix, or NextGen 586 | 高位字节是型号,低位字节是步进值。比如,一个xxyy的值,型号和步进值可以显示为:Model xx,Stepping yy
| Intel 386或者486 | 值的是形式xxyz
如果xx等于0xff(255),y~0xA是型号,z是步进的标识符。
如果xx不等于0xff,xx+'A'是步进标识符,yz是次要的步进标识符。 | ARM | 保留 |
一个小栗子(从百度百科转的 ),送给大家~#include <windows.h>
#include <stdio.h>
int main()
{
SYSTEM_INFO systemInfo;
GetSystemInfo(&systemInfo);
cout <<setw(20) << "处理器掩码: " << systemInfo.dwActiveProcessorMask << endl
<<setw(20) << "处理器个数: " << systemInfo.dwNumberOfProcessors << endl
<<setw(20) << "处理器分页大小: " << systemInfo.dwPageSize << endl
<<setw(20) << "处理器类型: " << systemInfo.dwProcessorType << endl
<<setw(20) << "最大寻址单元: " << systemInfo.lpMaximumApplicationAddress << endl
<<setw(20) << "最小寻址单元: " << systemInfo.lpMinimumApplicationAddress << endl
<<setw(20) << "处理器等级: " << systemInfo.wProcessorLevel << endl
<<setw(20) << "处理器版本: " << systemInfo.wProcessorRevision << endl;
return 0;
}
|