我的理解是.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. 在64位機器上運行32位.NET應用程序
- 6. 64位.NET應用程序中的32位ActiveX控件
- 7. 在XP,Vista,Windows7 ... 32和64位上運行.Net應用程序
- 8. 32位/ 64位Windows/Linux應用程序
- 9. 從32位應用程序啓動64位應用程序?
- 10. 在64位.net應用程序通過c + + 64位DLL pInvoke
- 11. 從64位應用程序引用.net 1.1程序集
- 12. iOS 32與64位應用程序
- 13. 64位Java應用程序:是64位操作系統,64位JRE和64位應用程序嗎?
- 14. 如何啓用32位.Net應用程序運行在Windows 2012 R2 64位
- 15. ODBC .NET 32位和64位
- 16. 使用64位與32位程序集的.NET版本
- 17. 適用於32位和64位平臺的Java應用程序
- 18. 在32位和64位應用程序中使用GDi繪圖
- 19. 試圖在64位Windows客戶端上運行32位.NET應用程序
- 20. 如何強制ANYCPU .net應用程序以32位或64位運行?
- 21. 將.Net 4.0 Web應用程序從32位IIS6遷移到64位IIS7
- 22. IIS和應用程序池32位和64位
- 23. 啓動64位進程修改32位和64位.NET machine.config中
- 24. 將數據從32位應用程序傳遞到64位應用程序?
- 25. 從32位應用程序啓動「不相關」的64位應用程序
- 26. 如何從32位C++應用程序啓動64位Java應用程序?
- 27. 在Winndows 32位和64位部署Asp.net應用程序開發
- 28. 編譯和鏈接Debian 64位上的32位應用程序
- 29. 分配32位和64位編譯應用程序
- 30. 在Ubuntu上開發32位和64位OpenGL應用程序
不是每個.NET應用程序都運行大量本機代碼。還有很多本地代碼可用於這兩種風格。操作系統就是最好的例子。隨後是CLR和抖動。 – 2012-02-07 14:06:59