说起来这个话题,如果我把题目改成“你是怎么判断零碎是 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 > 头文件中找到定义。