c++怎么判断系统是64位还是32位

说起来这个话题,如果我把标题改成“你是怎么判断系统是32位还是64位”,估计一下子会有很多技术爱好者撇撇嘴说“不就是打开我的电脑,找到属性,点进去看是不是32还是64吗”
c++怎么判断系统是64位还是32位_第1张图片

所以为了让你看到我的博客,并感兴趣,我不得不提高一点点难度,如果没有鼠标,只有一个键盘,只允许你用vs,vc或者clion让你去做这件事,你会怎么做?
我先说下我第一次遇到这个问题的思路,我仍然记得,第一次遇到这个问题的时候,我想到了两个观点:
1.通过代码模拟鼠标要做的这几个步骤(打开电脑,找到属性,看系统类型是32位还是64位)
2.通过系统相关的函数调用查看

很显然,对于我来说,我果断选择了第二种方法(不是因为聪明,而是因为我知道模拟这件事对我来说很难,第二种方法至少还有很多官方文档博客可以查看)

32位,64位,什么意思?

这时候,我需要明白一件事情,32位和64位究竟是什么意思?

从程序上说 :32位与64位程序,是指经过语言编译后的可执行文件,比如 C 语言编写的程序就需要区分是32位的还是64位.
从系统和硬件上讲 :CPU一次处理数据的能力是32位还是64位,关系着系统需要安装32位还是64位的系统. 32 位和 64 位中的“位”,也叫字长,是 CPU 通用寄存器的数据宽度,是数据传递和处理的基本单位。. 字长是 CPU 的主要技术指标之一,指的是 CPU 一次能并行处理的二进制位数,字长总是8的整数倍. 32位操作系统针对的32位的CPU设计。

一句话总结就是,在工作频率相同的情况下,64位处理器的处理速度会比32位的更快。而且除了运算能力之外,64位处理器的优势还体现在系统对内存的控制上,让应用程序更少地占用内存。

代码如下:

#include 
#include 
BOOL Is64bitSystem()
{
    SYSTEM_INFO si;
    GetNativeSystemInfo(&si);
    if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64)
        return TRUE;
    else
        return FALSE;
}
int main(void)
{
    if (Is64bitSystem())
        _tprintf(TEXT("The process is running under wow64.\n"));
    else
        _tprintf(TEXT("The process is not running under wow64.\n"));
    return 0;
}

函数解释:

SYSTEM_INFO

包含有关当前计算机系统的信息。这包括处理器的体系结构和类型、系统中处理器的数量、页面大小以及其他此类信息。

GetNativeSystemInfo function

将有关当前系统的信息检索到在 WOW64下运行的应用程序。如果从64位应用程序调用该函数,则它等效于 GetSystemInfo 函数。如果该函数是从运行在没有 Intel64或 x64处理器(比如 ARM64)的64位系统上的 x86或 x64应用程序调用的,那么只有在支持 x86仿真(或者在也支持 x64仿真的情况下为 x64)时,它才会返回系统为 x86的信息。

PROCESSOR_ARCHITECTURE_IA64

在 windows 中,环境变量 processor architecture 可以让你知道处理器的类型。例如,环境变量 processor architecture 的值为“x86′′ ,64位为“amd64′′或 ia64′′。

_tprintf

当您希望应用程序与 UNICODE 兼容时,可以使用它。

如果定义了 UnicODE 符号,那么“ tprintf”就变成了“ wprintf”。

否则它就会变成‘ printf’

您可以在 < tchar.h > 头文件中找到定义。

你可能感兴趣的:(c++怎么判断系统是64位还是32位)