含義
託管/非託管是微軟的.net framework中特有的概念。
非託管代碼:也叫本地(native)代碼。
託管代碼:是由公共語言運行庫(CLR)執行的代碼,而不是由操作系統直接執行。本地代碼經過兩次編譯,第一次將源代碼編譯成中間代碼(MSIL,MicrosoftIntermediate Language),第二次由.net中的CLR將中間代碼編譯成機器代碼。程序實際上是被“託管”在公共語言運行庫中。隨着程序集的運行,公共語言運行庫會持續地提供各種服 務,例如內存管理、安全管理、線程管理等等。和託管資源/非託管資源不同,不要弄混。
託管代碼的優點
1.跨平臺。有關內存管理(內存申請,內存釋放,垃圾回收之類的)全部都是.net的CLR來管理
2.更加安全,不會出現諸如內存泄露之類的問題
託管代碼的缺點
1.對程序的性能也產生一定的影響。CLR首次加載程序集代碼時,JIT將IL編譯成本地代碼時,會對其進行代碼優化,這類似與非託管C++編譯器的後端所做的事情.這可能也會花費加多的時間生成優化代碼。
2.不能直接讀取內存,不夠靈活