Managed 程式碼 (managed code) :由公用語言運行庫環境(而不是直接由作業系統)執行的代碼。Managed 程式碼應用程式可以獲得公用語言運行庫服務,例如自動記憶體回收、運行庫類型檢查和安全支援等。這些服務協助提供獨立於平台和語言的、統一的Managed 程式碼應用程式行為。
Unmanaged Code - Unmanaged 程式碼 :在公用語言運行庫環境的外部,由作業系統直接執行的代碼。Unmanaged 程式碼必須提供自己的記憶體回收、類型檢查、安全支援等服務;它與Managed 程式碼不同,後者從公用語言運行庫中獲得這些服務。
那到底什麼是託管,什麼是非託管?
Unmanaged 程式碼的英文名是
Unmanaged Code ,它是在
公用語言運行庫環境的外部,由作業系統直接執行的代碼。Unmanaged 程式碼必須提供自己的記憶體回收、類型檢查、安全支援等服務;它與
Managed 程式碼不同,後者從公用語言運行庫中獲得這些服務。
接下來的問題是什麼使
公用語言運行庫環境(英文名是
Common Language Runtime)呢。那首先看一下.
net framework的介紹。
.NET Framework 是支援產生和運行下一代應用程式和 XML Web services 的內部 Windows 組件
.NET Framework 具有兩個主要組件:
公用語言運行庫和
.NET Framework 類庫(Framework Class Library
)。
公用語言運行庫是 .NET Framework 的基礎。可以將運行庫看作一個在執行時管理代碼的代理,它提供記憶體管理、線程管理和遠端等核心服務,並且還強制實施嚴格的型別安全以及可提高安全性和可靠性的其他形式的代碼準確性。事實上,代碼管理的概念是運行庫的基本原則。
以運行庫為目標的代碼稱為Managed 程式碼,而
不以運行庫為目標的代碼稱為Unmanaged 程式碼。.NET Framework 的另一個主要組件是類庫,它是一個綜合性的物件導向的可重用類型集合,可以使用它開發多種應用程式,這些應用程式套件組合括傳統的命令列或圖形化使用者介面 (GUI) 應用程式,也包括基於 ASP.NET 所提供的最新創新的應用程式(如 Web Form和 XML Web services)。
然後我們來看看Managed 程式碼的執行過程:
1、選擇編譯器:
為獲得公用語言運行庫提供的優點,必須使用一個或多個針對運行庫的語言編譯器,如 Visual Basic、C#、Visual C++、JScript 或許多第三方編譯器(如 Eiffel、Perl 或 COBOL 編譯器)中的某一個。
由於運行庫是一個多語言執行環境,因此它支援各種資料類型和語言功能。您所用的語言編譯器確定可用的運行庫功能,而您使用這些功能設計代碼。編譯器(而不是運行庫)建立代碼必須使用的文法。如果您的組件必須完全能夠被用其他語言編寫的組件使用,您的組件的匯出類型必須只公開Common Language Specification (CLS) 中包括的語言功能。
2、編譯,將原始碼翻譯為microsoft中繼語言(MSIL)並產生所需的中繼資料。
3、在執行時,即時 (JIT) 編譯器將 MSIL 翻譯為機器碼。在此編譯過程中,代碼必須通過驗證過程,該過程檢查 MSIL 和中繼資料以查看是否可以將代碼確定為型別安全。
4、運行代碼:公用語言運行庫提供使執行能夠發生以及可在執行期間使用的各種服務的結構