1. 程式人生 > >c#的托管代碼和非托管代碼的理解

c#的托管代碼和非托管代碼的理解

ont 線程管理 安全 本機 有一個 自己 垃圾 相關 spa

理解托管和非托管代碼的前提之下,要先了解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 - 非托管代碼

在公共語言運行庫環境的外部,由操作系統直接執行的代碼。非托管代碼必須提供自己的垃圾回收、類型檢查、安全支持等服務;它與托管代碼不同,後者從公共語言運行庫中獲得這些服務。

c#的托管代碼和非托管代碼的理解