1. 程式人生 > >C#托管代碼是什麽?非托管代碼是什麽?

C#托管代碼是什麽?非托管代碼是什麽?

windows nag lac 以及 visual manage 調用 獲取 assembly

C#托管代碼是什麽?

托管代碼(Managed Code)實際上就是中間語言(IL)代碼。代碼編寫完畢後進行編譯,此時編譯器把代碼編譯成中間語言(IL),而不是能直接在你的電腦上運行的機器碼。程序集(Assembly)的文件負責封裝中間語言,程序集中包含了描述所創建的方法、類以及屬性的所有元數據。
托管代碼在公共語言運行庫(CLR)中運行。這個運行庫給運行代碼提供了多種服務,通常來說,公共語言運行庫可以加載和驗證程序集,並以此來保證中間語言的正確性。當某些方法被調用時,公共語言運行庫把具體的方法編譯成適合本地計算機運行的機器碼,並且將編譯好的機器碼緩存起來,以備下次調用時使用。這個過程就是即時編譯。
註意:程序實際上是被“托管”在公共語言運行庫中。隨著程序集的運行,公共語言運行庫會持續地提供各種服務,例如內存管理、安全管理、線程管理等等。
總結:托管代碼(Managed Code)是由公共語言運行庫(CLR)執行的代碼,而不是由操作系統直接執行。托管代碼也可以調用CLR的運行庫服務和功能,比如GC、類型檢查、安全支持等等。這些服務和功能提供獨立與開發語言的、統一的Managed Code應用程序行為。

原文轉至:http://www.cnblogs.com/iamscree/articles/2363096.html

C#非托管代碼是什麽?

非托管代碼(Unmanaged Code)是指直接編譯成目標計算機的機器碼,這些代碼只能運行在編譯出這些代碼的計算機上,或者是其他相同處理器或者幾乎一樣處理器的計算機上。

非托管代碼不能享受公共語言運行庫所提供的一些服務,例如內存管理、安全管理等。 如果非托管代碼需要進行內存管理等服務,就必須顯式地調用操作系統的接口,通常非托管代碼調用Windows SDK所提供的API來實現內存管理。 非托管程序也可以通過調用COM接口來獲取操作系統服務。 註意:C#跟Visual Studio平臺的其他編程語言不一樣的是,C#可以創建托管程序與非托管程序。當創建的項目選擇名字以MFC,ATL或者Win32開頭的項目類型,那麽這個項目所產生的就是非托管程序。

總結:非托管代碼(Unmanaged Code)不由CLR公共語言運行庫執行,而是由操作系統直接執行的代碼。

原文轉至:http://zhidao.baidu.com/link?url=bV1T7hfmsSFUUA1K5VyXN-dpgSW5-1j4tzV5uE9xMg4GLSNRQKs73Ky5UUqg5UX4uyfpkBs0PUeQw9bOFx_ng3aTXzaJYa1fFlATX2Yr9XK

C#托管代碼是什麽?非托管代碼是什麽?