C#託管代碼和非託管代碼

含義

託管/非託管是微軟的.net framework中特有的概念。

非託管代碼:也叫本地(native)代碼。

託管代碼:是由公共語言運行庫(CLR)執行的代碼,而不是由操作系統直接執行。本地代碼經過兩次編譯,第一次將源代碼編譯成中間代碼(MSIL,MicrosoftIntermediate Language),第二次由.net中的CLR將中間代碼編譯成機器代碼。程序實際上是被“託管”在公共語言運行庫中。隨着程序集的運行,公共語言運行庫會持續地提供各種服 務,例如內存管理、安全管理、線程管理等等。和託管資源/非託管資源不同,不要弄混。

託管代碼的優點

1.跨平臺。有關內存管理(內存申請,內存釋放,垃圾回收之類的)全部都是.net的CLR來管理

2.更加安全,不會出現諸如內存泄露之類的問題

託管代碼的缺點

1.對程序的性能也產生一定的影響。CLR首次加載程序集代碼時,JIT將IL編譯成本地代碼時,會對其進行代碼優化,這類似與非託管C++編譯器的後端所做的事情.這可能也會花費加多的時間生成優化代碼。

2.不能直接讀取內存,不夠靈活

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章