2012-05-10 72 views
22

對於任何VS項目,都可以在該項目的構建屬性中設置平臺目標。您可以將其設置爲任何CPU,x86,x64或Itanium。我的問題是,如果我將這個值設置爲x86,這是否意味着我無法在x64機器上運行該項目?如果是這樣,爲什麼這甚至被使用?只是總是使用任何CPU不是更好嗎?爲Visual Studio應用程序設置平臺目標的目的是什麼?

回答

30

如果我將此值設置爲x86是否意味着我無法在x64機器上運行該項目?

不,32位應用程序(x86)在64位Windows(x64)上運行良好。所有64位版本的Windows都包含一個稱爲Windows(Windows)64(WOW64)的32位兼容層。實際上,這是通常是,因爲大多數應用程序不會從64位編譯中受益。

但是,編譯64位(x64)確實表示您的應用程序無法在32位(x86)計算機上運行。你可以去倒退(64位可以運行32位),但你不能去轉發(32位不能運行64位)。

正如你指出的那樣,編譯Any CPU總是一個選項。這將允許應用程序在32位機器上作爲32位應用程序(x86)運行,並在64位機器上作爲64位應用程序(x64)運行。這聽起來像是靈丹妙藥,但也有成本。最值得注意的是,您需要在這兩個 32位和64位環境中廣泛地測試您的應用程序,而如果您僅針對32位環境(包括64位主機上的32位環境),則僅限於必須測試一個版本。額外的工作負載很少值得 - 大多數業務應用程序不會從64位環境的額外內存空間中受益,並且可能最終由於64位指針的開銷增加而擊敗任何潛在收益。

Visual Studio本身就是完全32位應用程序的一個很好的例子。沒有64位版本,但它在64位主機上運行良好。 This blog post有助於闡明爲什麼決定保持VS 32位。你可能會發現推理有助於你自己做出決定。同樣,儘管微軟Office現在可以使用64位軟件包,但微軟仍然建議的大多數客戶堅持使用32位版本。 64位版本存在兼容性問題,並沒有太大的好處。

+2

「大多數應用程序不受益於64位編譯」。這是個謊言。 WOW64層具有與之相關的內在開銷,更有效地佈置堆並且ASLR保護機制具有更多的熵位以保護您的應用程序在64位上。 – SecurityMatt

+6

我沒有說沒有好處。我說過,至少在這一點上,缺點基本上「沖淡」了優勢。這將是幾年內可能會發生變化的事情之一,我不會記得回頭更新我的答案。 –

+0

你們的評論非常有見地。這就是StackOverflow的全部內容。謝謝。 –

1

如果您沒有指定32位平臺,則Microsoft應用程序兼容性工具包無法確定該應用程序爲32位,並且不允許您創建32位解決方案文件,以允許應用程序在用戶帳戶控制時無需管理員憑據即可運行已啓用

相關問題