1. 程式人生 > >判斷系統是否64位

判斷系統是否64位

如今64位系統越來越流行了,對於軟體開發人員來說,掌握64位開發技術將會有更好的發展空間。而且經過這幾年的發展,64位開發工具也成熟了,例如Visual Studio 2010。
  關於如何配置64位平臺,MSDN上有詳細的介紹——
http://msdn.microsoft.com/zh-cn/library/9yb4317s.aspx
如何:針對 64 位平臺配置 Visual C++ 專案

  在很多時候,我們希望能相容老系統,於是配置了兩個編譯平臺——Win32 和 x64。
  但光這樣做還是不夠的,因為老系統不支援某些新功能。所以我們需要在執行時動態動態判斷。
  最常見的判斷有兩種——
1.判斷程式位數:當前程式被編譯到了哪個平臺。
2.判作業系統位數:當前程式是執行在32位的作業系統上,還是64位的作業系統。

  對於第一種——判斷程式位數,雖然也可以通過配置預處理符號,做編譯時判定。但該方法稍微有點繁瑣,而且在有些情況下不太適合——例如我想獲得程式位數字符串,就必須用“#if”等語句寫多行程式碼。
  對於第二種——判作業系統位數,那就只有在執行時判斷了。

  程式碼如下——

複製程式碼
#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 *LPFN_GetNativeSystemInfo)(LPSYSTEM_INFO lpSystemInfo); LPFN_GetNativeSystemInfo fnGetNativeSystemInfo = (LPFN_GetNativeSystemInfo)GetProcAddress( GetModuleHandle(_T("kernel32")), "GetNativeSystemInfo");; if (NULL != fnGetNativeSystemInfo) { fnGetNativeSystemInfo(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 %dbit Program, run on %dbit System."), nBitCode, nBitSys); // _getch(); return 0; }
複製程式碼

  在32位winXP上的執行效果——

  在64位win7上的執行效果——

  注:
1.GetNativeSystemInfo是Windows XP的新增API,用於取得真實系統資訊。(32位程式執行在64位系統上時,GetSystemInfo返回的是經過WOW64修改後的資訊)
2.IsWow64Process用於判斷某程序是否執行在WOW64下。對於64位程式,Wow64Process引數會返回FALSE。

本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利.

相關推薦

VC程式裡判斷系統64還是32的正確方法

VC程式裡判斷系統是64位還是32位的正確方法 BOOL IsWow64()  {      typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);   &nbs

Delphi判斷系統是否64

近來客戶64位系統越來越多,配置的時候老出問題,搜了個這個給客戶判斷一下: function IsWin64: Boolean; var   Kernel32Handle: THandle;   IsWow64Process: function(Handle: W

判斷系統是否64

如今64位系統越來越流行了,對於軟體開發人員來說,掌握64位開發技術將會有更好的發展空間。而且經過這幾年的發展,64位開發工具也成熟了,例如Visual Studio 2010。   關於如何配置64位平臺,MSDN上有詳細的介紹——http://msdn.microsof

32系統64系統的選擇

64位系統 作為一名網絡管理員,經常會給辦公電腦安裝系統,但是大部分企業的辦公電腦配置一般不會很高。在選擇系統的時候可能需要註意一些問題。 隨著XP的淘汰,可能大家都會選擇更新到win7,之前2GB內存會考慮增加到4GB內存,那可能就會考慮居然內存有4GB了,是不是需要安裝64位的Wi

32系統64系統對內存的支持

windows系統 筆者最早用的筆記本是HP CQ45-M02TU,內存僅2G(DDR3_1333MHZ),安裝的WIN7_32位操作系統。最近它運行緩慢,通過升級內存提升性能。網購了一條2G同頻內存,安裝後啟動系統,按鍵WIN+PauseBreak,內存顯示為4G,可用內存僅為2.66G,另外1

32系統64系統上資料型別的長度

轉載:http://blog.csdn.net/huyisu/article/details/17604983 int型字長問題: ① C/C++規定int字長和機器字長相同; ② 作業系統字長和機器字長未必一致; ③ 編譯器根據作業系統字長來定義int字長; 由上面三點可

一個C程式辨別系統64還是32

知識儲備: 計算機的位數取決CPU中暫存器的寬度,具體來說就是算術邏輯運算單元(ALU)的寬度,用來表徵計算機的計算能力,ALU一次可以計算最大長度整數即計算機的位數。 在32bit的計算機中,ALU一次可以計算的最大整數為4個位元組。 在64bit的計算機中。ALU一次可以計算的最

LINUX系統ORACLE11G 64安裝檔案,非官方下載,不需要登入ORACLE賬戶linux.x64_11gR2_database

從oracle官方下載還得註冊一個oracle的帳號,這個不需要,直接下載的檔案。 注意這是linux版本的,64位,oracle11g的。 解壓密碼:123456 網盤檔案,可能會有一個廣告頁面,請忽略,下載速度還是很快的哈。 --------PS-----------------

樹莓派3B+安裝Ubuntu16.04系統64

目錄 系統下載 補丁 刷系統 換源 無線 U盤掛載 系統下載 感謝公眾號:樹莓派愛好者基地。更多系資源請關注公眾號。 Ubuntu16.04系統 補丁 解決關機問題,下載好系統後,直接在根目錄替換即可 刷系統 樹莓派安裝系統過程資源豐

QT 判斷是否是64

#include<Windows.h> typedefvoid(WINAPI*PGNSI)(LPSYSTEM_INFO); Dialog::Dialog(QWidget*parent):

32系統64系統的區別

32位和64位系統指的是:計算機CPU處理資訊的方式,64位作業系統能夠處理更大量的RAM資料,換句來說,64位作業系統支援更大的內容容量,64位作業系統相比32位作業系統處理資訊的效率亦更高。  

最新win10系統下載64

  相信大家都對win10系統下載64位有所瞭解了,但是又沒有到特別瞭解的地步,所以仍然對是否要使用這款系統猶豫不決。今天小編決定來教一教大家,下面就給大家帶來win10系統下載64位吧。   一、系統之家純淨版主要更新   * 更新2345看圖王最新版   * 更新輸

C++32系統64系統基本資料型別

32位與64位系統資料型別不同的平臺上對不同的資料型別分配的位元組數是不同的,一般的,資料型別的位元組數是由編輯器決定的(編譯期間決定資料型別長度)。簡單來說,平臺就是CPU+OS+Compiler,cpu的位是指一次性可處理的資料量是多少,1位元組=8位,32位處理器可以一

【Windows程式設計】如何判斷作業系統是64還是32

我為我基礎知識掌握的薄弱,感到深深的“折服”。感覺從知識體系的掌握上就有問題!!需要探索性的改進自身的知識架構。加油吧…… 一,不同位數作業系統下型別簡介 型別 32位作業系統(位元組) 64位作業系統(位元組) char 1 1 short 2 2 int 4 4 l

解決64win7系統+vs2013+64access資料庫連線問題

解決辦法:下載安裝32位的access引擎 安裝即可, vs工程選擇win32。 資料庫建立連線的過程: 1、匯入dll,使用名稱空間,在stdafx.h檔案裡面加上如下語句: #import "C:\Program Files\Common Files\System\A

Android精確判斷是否為64

private static boolean is64BitImpl() {         try {             if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {          

基本資料型別在32系統64系統中所佔位元組數

最近看到這方面的知識,眾說紛紜,所以自己動手實驗下。請看程式碼: #include<iostream> using namespace std; int main() { cout << "字元資料:" <<

32系統64區別

第一,設計初衷不同。64位作業系統的設計初衷是:滿足機械設計和分析、三維動畫、視訊編輯和創作,以及科學計算和高效能運算應用程式等領域中需要大量記憶體和浮點效能的客戶需求。換句簡明的話說就是:它們是高科技人員使用本行業特殊軟體的執行平臺。而32位作業系統是為普通使用者設計的。

opencv2.49+vs 2012配置(編譯器x64,系統win7 64

網上關於opencv配置的相關資源有很多,本部落格主要從0開始介紹opencv2.49配置vs2012的情況,其中編譯器選擇x64,系統為win7 64位系統。 首先進入opencv官網https:

C# 32系統64系統調用不同的DLL文件

文件 fault create data star cas return sqlit else string dll32 = System.Windows.Forms.Application.StartupPath + @"\System.Data.