歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 在Visual Studio下編寫64位應用程序應注意什麼

在Visual Studio下編寫64位應用程序應注意什麼

日期:2017/3/1 9:37:34   编辑:Linux編程

64位應用程序的執行效率要比32位應用程序高的多。隨著64位操作系統的逐漸普及,64位應用程序也必將隨之風靡。在Visual Studio中也已經支持了64位應用程序的開發。筆者在這裡就將其開發要點做一下總結。權當作拋磚引玉,跟大家切磋一下。

  一、確定在64位操作系統上運行還是在WOW64下運行。

  在Visual Studio平台中最後對64位應用程序編譯時,需要指定這個應用程序是在64位操作系統上作為本機應用程序運行還是在WOW64環境下運行。這個WOW64環境是一個由操作系統提供的兼容性環境。這個環境主要是讓32位應用程序也能夠在64位的操作系統上運行。換句話說,在編譯時要確定產生的應用程序是真正的64位應用程序(只能夠在64位操作系統上運行),還是偽64位應用程序(其實是32位應用程序,只是可以借助WOW64在64位操作系統上運行)。

  在確定這個內容的時候,有一個內容筆者要特別提醒大家。通常情況下在64位操作系統上,所有使用NET Framework 1.1以前版本生成的應用程序都將被視作為32位應用程序,並且始終在32位公共語言運行上的WOW64環境下運行;而在2.0版本以後生成的32位特定應用程序可以在64位平台上的WOM64環境下運行。這兩個版本之間的細微差異,各位讀者可以開發一個小程序測試一下即可。其中的內涵是只可意會、不可言傳呀。

  二、正確部署Visual Studio開發環境。

  在開發64位應用程序之前,需要明白一點。到目前為止,Visual Studio 2008仍然是一個32位的應用程序。在安裝部署時,如果是在X86的計算機上(32位操作系統),則其將安裝32位的CLR版本。而如果在64位操作系統上安裝部署時,安裝進程將同時安裝32位的CLR版本和合適的64位CLR。注意當將其部署到64位操作系統的時候,它將在WOW64環境下運行。

  此時筆者認為需要注意一個細節問題。當在Wom64環境下運行32位應用程序時,應用程序只限於在一個處理器上執行。也就是說應用程序不能夠享受64位操作系統所帶來的性能上的提升。而單處理器執行會降低32位應用程序在基於Itanium系統上運行時的性能和可伸縮性。為此如果對於性能要求比較高的應用程序或者有負載比較高的服務器,盡量不要采用兼容的方式。即32位應用程序在32位操作系統上運行,而不要在Wom64環境下運行。否則的話,不但不能夠享受64位操作系統帶來的好處,反而會降低應用程序原有的性能,得不償失。

  三、32位應用程序在64位CLR上運行可能導致意外的結果。

  雖然64位操作系統提供另一個WOW64環境,使得32位應用程序能夠在64位操作系統上運行。也就是說,在大部分情況下32位應用程序可以在32位或者64位操作系統上同等的運行,其最終的結果都是相同的。但是有時候也會有意外。這些意外主要是以下原因所造成的。

  如在應用程序的結構中包含一些大小隨平台而改變的成員。如指針類型的對象,其會操作操作系統位數的不同而改變。再如指針算法中如果包含固定大小,或者不正確的平台調用與COM聲明等等,都會導致32位應用程序在64位CLR上運行出現一些意外的結果。

  為此筆者特別提醒,如果開發人員設計一些兼容的應用程序時(即可以同時在32位與64位應用程序上運行),必須要注意這些因素對應用程序運行過程的影響。在開發中,要盡量避免使用這些對象,以免不必要的麻煩。

  四、如何判斷某個應用程序是否適合在64位操作程序上運行。

  在應用程序開發時,開發人員可能會借鑒已有的應用程序。此時他們就需要判斷手中的應用程序能否在WOW64環境下運行。或者說,只有在特定的平台下,如32位操作系統或者64位操作系統下(而不是WOM64)下運行。要實現這個目的的話,開發環境提供了一個Corflags的命令。簡單的說,在命令行中使用corflags.exe可以確定某個exe或者dll是僅僅在特定平台上運行,還是只可以在WOW64環境下運行。另外在必要的情況下,程序開發人員還可以利用這個命令來更改應用程序的平台狀態。

  五、調試64位應用程序與32位應用程序之間的差異。

  在開發平台中自帶有應用程序的調試工具。應用程序調試一般包括本地調試與遠程調試。對於一些中大型的應用程序而言,遠程調試是必須的。這裡需要注意,在任何情況下,如果在64位計算機上安裝遠程調試都會同時安裝32位和64位版本的遠程調試監視器。不過在調試64位應用程序的時候,則必須要選擇正確的版本。如需要選擇“遠程調試器X64)。否則的話,調試結果會有偏差。

下面介紹一下在64位平台上VS中會出現的編譯錯誤

模塊計算機類型“x64”與目標計算機類型“X86”沖突

一種可以解決的方法是:

1、修改目標計算機類型:項目->熟悉->連接器(Linker)->高級->目標計算機。然後把目標計算機類型改成X64。如下圖所示:

2、配置管理器:解決方案平台(默認是Win32的)->選擇配置管理器->活動解決方案平台下選擇x64。如下圖所示:


清楚一下項目 重新編譯一下 OK!

項目生成64位的應用程序

Visual Studio 2010 & Help Library Manager 安裝說明 http://www.linuxidc.com/Linux/2012-11/74814.htm

OpenCV 2.3.x/2.4.x在Visual Studio 2005/2008和Visual Studio 2010配置方法詳解 http://www.linuxidc.com/Linux/2012-08/68302.htm

使用OpenCV-2.4.0.exe文件編譯x86或x64平台Visual Studio 2005/2008/2010目標文件 http://www.linuxidc.com/Linux/2012-08/68305.htm

Visual Studio LightSwitch增加對HTML5和JavaScript的支持 http://www.linuxidc.com/Linux/2012-06/63397.htm

Visual Studio 11:使用 C++ 開發一個最簡單的 Metro 應用 http://www.linuxidc.com/Linux/2012-06/62657.htm

Visual Studio 的詳細介紹:請點這裡
Visual Studio 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved