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

  介绍

这篇文章将为大家详细讲解有关利用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标准并不规定具体数据类型的长度大小,只规定级别。作下比较:

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