1. 程式人生 > >在Visual Studio下編寫64位應用程式應注意什麼

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

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中會出現的編譯錯誤

一種可以解決的方法是:

1、修改目標計算機型別:專案->熟悉->聯結器(Linker)->高階->目標計算機。然後把目標計算機型別改成X64。如下圖所示:



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


清楚一下專案 重新編譯一下 OK!

專案生成64位的應用程式