想象一下,不使用COM組件或PInvoke的純.NET應用程序。如果目標系統是32位或64位,那麼這很重要嗎?.NET在32位或64位系統上有什麼區別?
回答
假設沒有COM組件,P/Invoke等安全代碼,應該沒有語義差異,但性能可能會受到影響。考慮:64位內存更多,但引用更大。贏得一些,輸掉一些。
無論如何,這裏有一些有用的參考資料:
「[...]考慮一個.NET應用程序 是100%安全的代碼在這種情況下 有可能採取您在 運行 .NET可執行文件。 32位機器並將其移動到 64位系統,並使其成功運行 爲什麼它可行? 由於程序集是100%類型安全的 我們知道在本機代碼或COM對象上沒有依賴項 並且 沒有'不安全'的代碼,這意味着 該應用程序在CLR的控制下完全運行 。在CLR 保證,而作爲 剛剛在時間(JIT)編譯的結果所產生的二進制代碼 將32位和64位之間 不同, 執行該代碼都將是 語義一樣。 [...]」
理論上的應用將會運行相同,實際上在實現方面存在差異,32位和64位框架之間也存在不同的錯誤,這種情況並不常見,但確實發生了。在過去的2個月中,我遇到過至少3種情況,其中相同的MSIL在定位x86時的行爲與在x64系統上定位AnyCPU時的行爲不同。 – 2009-07-21 03:38:15
如果應用程序的目標是AnyCPU,則運行時行爲將會有所不同,特別是內存使用情況和限制。
在64位上,不會有相同的32位內存限制(理論上2GB最大內存,實際上是1.2-1.6)。但是,所有的對象引用都是兩倍,所以64位系統會使用更多的內存。
此外,64位系統通常有額外的寄存器等,所以有時性能可能會略有提高。不過,這是特定於平臺的。
如果應用程序的目標是x86,它將在WoW64下運行,並且與它在32位系統中的行爲方式幾乎完全相同。
除了那些由Reed Copsey識別的方法之外,另一種方式可能是如果你的「純粹」應用程序碰巧使用了System.IntPtr結構體,或者它使用了不安全的代碼(這不是一回事作爲P/Invoke)和指針算術。
另一個值得關注的重點是召喚幾乎所有System.Runtime.InteropServices.Marshal類的東西。有各種各樣的令人敬畏的方式在那裏拍攝自己的腳(當然,當你需要它時非常有用)。
良好補充 – 2009-07-08 00:44:16
- 1. 64位文件系統與32位文件系統最大區別是什麼
- 2. 爲什麼32位和64位numpy/pandas之間有區別
- 3. 在64位Windows上安裝32位或64位應用程序有什麼區別?
- 4. 64位操作系統上的32位或64位應用程序?
- 5. 無論系統是32位還是64位,uint均爲32位?
- 6. 在32位或64位matlab上運行?
- 7. 32位和64位操作系統和處理器(Intel架構和Windows)之間有什麼區別
- 8. 32位.NET應用程序和64位.NET應用程序有區別嗎?
- 9. 在64位系統上使用32位DLL顯示0x8007000B錯誤
- 10. 在64位系統上使用32位SQL服務器ODBC
- 11. 在64位操作系統上調試32位CASSINI(Oracle 9)
- 12. 在64位和32位系統上運行程序
- 13. 在32/64位系統上使用16位指針的C++
- 14. 在64位系統上註冊32位DLL
- 15. 在64位服務器上加載32位dll操作系統
- 16. 在32位操作系統上運行64位jvm
- 17. 在64位系統上將Asp.NET編譯爲32位
- 18. 爲什麼__sync_add_and_fetch適用於32位系統上的64位變量?
- 19. 如何檢測Flex中的32位或64位操作系統?
- 20. 針對64位VM實例的64位系統上的32位VMWare
- 21. 確定從32位操作系統或64位操作系統C/C++應用
- 22. SharePoint 64位或32位
- 23. C++函數檢查軟件是否在32位或64位系統上運行
- 24. Windows上的Perl:32位或64位?
- 25. 64位系統上的Java本地接口32位dll
- 26. VM Virtual Box 64位硬件上的32位操作系統
- 27. 64位操作系統上的32位ActiveX DLL的問題
- 28. 產生32位Debian系統上的64位代碼
- 29. 64位操作系統上的32位VC++可再發行?
- 30. 32位/ 64位系統上的二進制文件?
重複:http://stackoverflow.com/questions/145026 – 2009-07-08 00:45:09