C++获取系统和程序的位数
2017-10-24 15:13
148 查看
1. 概述
如今 64 位系统越来越流行了 , 对于软件开发人员来说 , 掌握 64 位开发技术将会有更好的发展空间 ; 而且经过这几年的发展 , 64 位开发工具也成熟了 , 例如 Visual Studio 2010 等后续版本 ;关于如何配置64位平台 , MSDN上有详细的介绍 : http://msdn.microsoft.com/zh-cn/library/9yb4317s.aspx
在很多时候 , 我们希望能兼容老系统 , 于是配置了两个编译平台 Win32 和 x64 ;
但光这样做还是不够的 , 因为老系统不支持某些新功能 ; 所以我们需要在运行时动态动态判断 ;
最常见的判断有两种 :
判断程序位数 : 当前程序被编译到了哪个平台 ;
判操作系统位数 : 当前程序是运行在 32 位的操作系统上 , 还是 64 位的操作系统 ;
对于第一种判断程序位数 , 虽然也可以通过配置预处理符号 , 做编译时判定 ; 但该方法稍微有点繁琐 , 而且在有些情况下不太适合 , 例如我想获得程序位数字符串 , 就必须用
#if等语句写多行代码 ;
对于第二种判操作系统位数 , 那就只有在运行时判断了 ;
2. 代码实例
#include "stdafx.h" #include <Windows.h> #include <stdio.h> #include <tchar.h> #include <conio.h> // 获取程序位数 (被编译为多少位的代码) int GetProgramBits() { return sizeof(int*) * 8; } // 获取系统信息 void SafeGetNativeSystemInfo(__out LPSYSTEM_INFO lpSystemInfo) { if (NULL == lpSystemInfo) { return; } typedef VOID (WINAPI *FuncGetSystemInfo)(LPSYSTEM_INFO lpSystemInfo); FuncGetSystemInfo funcGetNativeSystemInfo = (FuncGetSystemInfo)GetProcAddress(GetModuleHandle(_T("kernel32")), "GetNativeSystemInfo"); // 优先使用 "GetNativeSystemInfo" 函数来获取系统信息 // 函数 "GetSystemInfo" 存在系统位数兼容性问题 if (NULL != funcGetNativeSystemInfo) { funcGetNativeSystemInfo(lpSystemInfo); } else { GetSystemInfo(lpSystemInfo); } } // 获取操作系统位数 int GetSystemBits() { SYSTEM_INFO si; SafeGetNativeSystemInfo(&si); if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 || si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64 ) { return 64; } return 32; } int _tmain(int argc, _TCHAR* argv[]) { const int nBitCode = GetProgramBits(); const int nBitSys = GetSystemBits(); _tprintf(_T("I am a %d bit Program, run on %d bit System..."), nBitCode, nBitSys); _getch(); return 0; }
作者 Github : tojohnonly , 博客 : EnskDeCode
相关文章推荐
- 关于C/C++获取指针大小判断系统位数的猜想
- C++程序获取系统信息方法
- Window系统下C/C++程序毫秒级和微秒级执行时间获取方法
- 程序计时及时间获取(Windows系统C++)
- [C/C++]_[初级]_[获取Windows系统的位数32位或64位]
- C/C++ 获取Windows系统的位数32位或64位的实现代码
- JAVA/C/C++获取当前系统毫秒时间+计算程序运行时间
- Window系统下C/C++程序毫秒和微秒级程序运行时间的获取方法
- C++获取Windows系统License信息的方法
- VC获取系统时间、程序运行时间(精确到秒,毫秒)的五种方法
- VC获取系统时间、程序运行时间(精确到秒,毫秒)的五种方法
- c++获取系统时间(引用别人的博文)
- 查找系统中的大文件(Windows) C++程序
- SQL Server安装程序无法获取ASPNET账户的系统账户信息
- VS调试C++程序,提示无法启动程序,“...exe”。系统找不到指定文件
- Unix/Linux环境C编程新手教程(22) C/C++怎样获取程序的执行时间
- vc 程序效率测试 与 如何获取系统精确时间
- [Tools]获取系统开关机信息(附源码及程序)
- [C-C++]获取系统时间
- C++获取系统内存及分别率