我的理解是.NET應用程序是獨立於平臺的,所以純.NET代碼應該運行在x86或64位機器上。除非你的.NET代碼調用一些本地代碼,否則它是依賴於平臺的。真的嗎?32位.NET應用程序和64位.NET應用程序有區別嗎?
回答
.NET應用程序可以編譯爲定位x86,x64或「Both」。通常情況下,如果您依賴於其他平臺不可用的COM控件,則只需定位一個平臺。
您的代碼可以編譯爲完全獨立於平臺,也可以針對特定平臺。標準建議是將庫結構保持中立(即「任何CPU」),併爲可執行文件指定x86。 AnyCPU executables are usually more trouble than they're worth:爲什麼Visual Studio 2010中默認使用這種方法的原因說明如下
- 在兩個非常不同的模式(x64和x86)運行增加了產品的複雜性和測試成本。
- 無論如何,32位往往會(稍快)一些。
- 某些功能在x64中不可用。
- 如果超過4個 GB地址空間將會很有用,那麼正確的做法是將僅作爲 x64,並避免支持兩個平臺的成本。
當然,如果你只是針對86那麼你的代碼將在x64通過WoW64仍然可以運行。
我對可執行文件的默認行爲非常困惑。目標到x86? – 2012-02-07 14:06:11
是的,可執行文件以x86爲目標。在VS2010中創建一個新的解決方案,然後添加一個控制檯應用程序,一個Windows窗體應用程序,一個WPF應用程序和一個類庫。如果您隨後查看配置管理器(右鍵單擊該解決方案,它位於上下文菜單中),您將看到應用程序全部配置爲x86,而類庫則設置爲AnyCPU。如果你意外地創建了一個AnyCPU版本(就像我幾個月前做的那樣),這可能會特別惱人 - 你的可執行文件將不會被構建,因爲它們默認沒有任何有效的AnyCPU配置。 – 2012-02-07 14:11:32
x86意味着它嚴格編譯32位,x64意味着它嚴格編譯64位,而AnyCPU意味着它編譯32位操作系統上的32位和64位操作系統上的64位。如果您對COM/PInvoke進行任何調用,則需要針對正確的拱形,因爲COM/PInvoke使用指針而不是引用。我可能會稍微偏離,但這是總體思路。附: 64位可以訪問額外的CPU寄存器,因此代碼可能更快,並且所有64位整數可以在1個週期內計算。因此,任何Int64變量將運行得更快。 – Bengie 2012-02-07 14:13:02
- 1. 32位和64位.NET(4)應用程序之間的差異
- 2. .NET和64位應用程序
- 3. 使用32位或64位DLL編譯.net應用程序
- 4. 32位dll導入64位.Net應用程序
- 5. 在XP,Vista,Windows7 ... 32和64位上運行.Net應用程序
- 6. 32位/ 64位Windows/Linux應用程序
- 7. 從32位應用程序啓動64位應用程序?
- 8. 將SAFELY 64位應用程序轉換爲32/64位應用程序
- 9. 在64位.net應用程序通過c + + 64位DLL pInvoke
- 10. iOS 32與64位應用程序
- 11. 64位Java應用程序:是64位操作系統,64位JRE和64位應用程序嗎?
- 12. 如何啓用32位.Net應用程序運行在Windows 2012 R2 64位
- 13. 使用64位與32位程序集的.NET版本
- 14. 在32位和64位應用程序中使用GDi繪圖
- 15. 將.Net 4.0 Web應用程序從32位IIS6遷移到64位IIS7
- 16. 如何強制ANYCPU .net應用程序以32位或64位運行?
- 17. 從32位應用程序啓動「不相關」的64位應用程序
- 18. SetWindowsHook支持32位和64位應用程序
- 19. 32位和64位應用程序之間的COM互操作
- 20. 在Winndows 32位和64位部署Asp.net應用程序開發
- 21. 64位和32位應用程序之間的橋樑
- 22. 編譯和鏈接Debian 64位上的32位應用程序
- 23. 在Ubuntu上開發32位和64位OpenGL應用程序
- 24. 如何使32位VB6應用程序適應64位Office?
- 25. 64位應用程序開始32位進程
- 26. 從32位應用程序啓動64位進程?
- 27. 64位應用程序與32位進程通信
- 28. .NET中x86和64位程序集的區別
- 29. 32位生成服務器和.NET Web應用程序
- 30. 在64位Windows上安裝32位或64位應用程序有什麼區別?
不是每個.NET應用程序都運行大量本機代碼。還有很多本地代碼可用於這兩種風格。操作系統就是最好的例子。隨後是CLR和抖動。 – 2012-02-07 14:06:59