这篇文章将为大家详细讲解有关利用c++怎么判断系统是64位还是32位,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
<强> 1,IsWow64Process 强>
确定指定进程是否运行在64位操作系统的32环境下(Wow64)。
<强>语法强>
BOOL WINAPI IsWow64Process ( __in HANDLE  hProcess, __out PBOOL  Wow64Process );
<>强参数强>
<代码> hProcess 代码>
进程句柄,该句柄必须具有PROCESS_QUERY_INFORMATION或者PROCESS_QUERY_LIMITED_INFORMATION访问权限
<代码> Wow64Process 代码>
指向一个bool值,
如果该进程是32位进程,运行在64操作系统下,该值为true,否则为假的。
如果该进程是一个64位的应用程序,运行在64位系统上,该值也被设置为假的。
<强>返回值强>
如果函数成功返回值为非零值。
如果该函数失败,则返回值为零,要获取扩展的错误的信息,请调用每个盘。
微软的例子:
# include & lt; windows.h> # include & lt; tchar.h> typedef BOOL (WINAPI * LPFN_ISWOW64PROCESS),(处理,PBOOL); LPFN_ISWOW64PROCESS fnIsWow64Process; BOOL IsWow64 () { BOOL bIsWow64 =,假;//IsWow64Process is  not available 提醒all supported versions of 窗户。//Use GetModuleHandle 用get a handle 用,DLL that contains 从而函数//以及GetProcAddress 用get a pointer 用,function if 可用。 fnIsWow64Process =, (LPFN_ISWOW64PROCESS), GetProcAddress ( GetModuleHandle(文本(“kernel32"))、“IsWow64Process"); 如果(NULL !=, fnIsWow64Process) { if (! fnIsWow64Process (GetCurrentProcess(),和bIsWow64)) {//handle 错误 } } return bIsWow64; } main (), void  int { 如果(IsWow64 ()) _tprintf(文本(“,process is running under WOW64 \ n")); 其他的 _tprintf(文本(“,process is not running under WOW64 \ n")); return 0; }
注意:使用此函数判断操作系统是32位还是64位并不合适,勉强要用的话,可以指向一个32位进程。
<强> 2,比较合适的做法是:强>
BOOL Is64bitSystem () { SYSTEM_INFO 如果; GetNativeSystemInfo(和si); if (si.wProcessorArchitecture ==, PROCESSOR_ARCHITECTURE_AMD64 | | 时间==si.wProcessorArchitecture PROCESSOR_ARCHITECTURE_IA64 ) return 真实; 其他的 return 假; }
<>强补充知识:强> <强> C编程注意32位机器和64位机器的差别及无符号和签署了强>
1.64位CPU拥有更大的寻址能力,最大支持到16 gb内存,而32位只支持4 g内存
2.64位CPU一次可提取64位的数据,比32位提高了一倍,理论上性能会提升1倍。但这是建立在64位操作系统,64位软件的基础上的。
C/c++ 32位机器和64位机器差异问题总结跨平台移植问题语言编程需要注意的64位和32位机器的区别
# include & lt;, stddef.h> OS 版本:Red Hat Enterprise  Linux Server release 5.3, (Tikanga), Linux 2.6.18-128.el5 # 1, SMP Wed Dec 17, 11:41:38 EST 2008年,x86_64 x86_64 x86_64 GNU/Linux size_t本身一个作用就是避免考虑64还是32.64位下长和指针是64位的 size_tm_unNo; sprintf(路径,“% u" m_unNo);,//这句在32位机器上正常,64位机器上会编译警告:“警告:格式,“% u # 39;,需要类型,“unsigned int # 39;,但实参,4,的类型为,size_t # 39;” % u 对应,unsigned int在64位机器上还是32位,而size_t已经变成64位了。 char *,指针在64位下是64位 时间=m_pMem new char (nSize); int off =, (int) m_pMem % nAlign;,//,在,32位编译正常,在64位机器上编译报错:“,错误:从,“char * & # 39;,到,“int # 39;,的转换损失精度”
改为就可以达到兼容效果了int=(uint64_t) m_pMem % nAlign;//因为int在64位下仍为32位,char×已经变位64位了。
<强>一、数据类型特别是int相关的类型在不同位数机器的平台下长度不同。强>
C99标准并不规定具体数据类型的长度大小,只规定级别。作下比较: