理解托管和非托管代碼的前提之下,要先瞭解CLR(公共語言運行庫) .Net Framework 是由彼此獨立又相關的兩部分組成:CLR 和 類庫, CLR是它為我們提供的服務,類庫是它實現的功能. .NET的大部分特性 垃圾收集,版本控制,線程管理等,都使用了CLR提供的服務當你為.NET Fram ...
理解托管和非托管代碼的前提之下,要先瞭解CLR(公共語言運行庫)
.Net Framework 是由彼此獨立又相關的兩部分組成:CLR 和 類庫, CLR是它為我們提供的服務,類庫是它實現的功能.
.NET的大部分特性----垃圾收集,版本控制,線程管理等,都使用了CLR提供的服務
當你為.NET Framework編譯源代碼的時候,得到的目標代碼不是CPU能識別的機器指令,而是一種叫做"微軟中間語言(MSIL,或簡稱為IL的代碼)"的新語言.CLR提供了一個實時編譯器,
用來把IL代碼編譯為本機機器代碼.這樣一來,CLR能夠使代碼變得可移植,因為.NET應用程式的源代碼必須被編譯為IL代碼,這些IL代碼可以運行在任何提供CLR服務的平臺上.從CLR的角度來看,
所有的語言都是平等的,只要有一個能生成IL代碼的編譯器就行,這就確保了各種語言的互操性.
managed code-托管代碼
由公共語言運行庫(CLR)環境(而不是直接由操作系統)執行的代碼。托管代碼應用程式可以獲得公共語言運行庫服務,例如自動垃圾回收、運行庫類型檢查和安全支持等。
這些服務幫助提供獨立於平臺和語言的、統一的托管代碼應用程式行為。
Unmanaged Code - 非托管代碼
在公共語言運行庫環境的外部,由操作系統直接執行的代碼。非托管代碼必須提供自己的垃圾回收、類型檢查、安全支持等服務;它與托管代碼不同,後者從公共語言運行庫中獲得這些服務。