说起来这个话题,如果我把题目改成“你是怎么判断零碎是32位还是64位”,预计一下子会有很多技术爱好者撇撇嘴说“不就是关上我的电脑,找到属性,点进去看是不是32还是64吗”

所以为了让你看到我的博客,并感兴趣,我不得不进步一点点难度,如果没有鼠标,只有一个键盘,只容许你用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 <windows.h>#include <tchar.h>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 > 头文件中找到定义。