到底什麼是託管,什麼是非託管的研究

2022-02-28 03:48:18 字數 1751 閱讀 5646

託管** (managed code) :由公共語言執行庫環境(而不是直接由作業系統)執行的**。託管**應用程式可以獲得公共語言執行庫服務,例如自動垃圾**、執行庫型別檢查和安全支援等。這些服務幫助提供獨立於平台和語言的、統一的託管**應用程式行為。

unmanaged code - 非託管**:在公共語言執行庫環境的外部,由作業系統直接執行的**。非託管**必須提供自己的垃圾**、型別檢查、安全支援等服務;它與託管**不同,後者從公共語言執行庫中獲得這些服務。

那到底什麼是託管,什麼是非託管?

非託管**的英文名是unmanaged code,它是在公共語言執行庫環境的外部,由作業系統直接執行的**。非託管**必須提供自己的垃圾**、型別檢查、安全支援等服務;它與託管**不同,後者從公共語言執行庫中獲得這些服務。

接下來的問題是什麼使公共語言執行庫環境(英文名是common language runtime)呢。那首先看一下.net framework的介紹。

.net framework是支援生成和執行下一代應用程式和 xml web services 的內部 windows 元件

.net framework具有兩個主要元件:公共語言執行庫.net framework 類庫(framework class library公共語言執行庫是 .net framework 的基礎。可以將執行庫看作乙個在執行時管理**的**,它提供記憶體管理、執行緒管理和遠端處理等核心服務,並且還強制實施嚴格的型別安全以及可提高安全性和可靠性的其他形式的**準確性。事實上,**管理的概念是執行庫的基本原則。以執行庫為目標的**稱為託管**,而不以執行庫為目標的**稱為非託管**。.net framework 的另乙個主要元件是類庫,它是乙個綜合性的物件導向的可重用型別集合,可以使用它開發多種應用程式,這些應用程式包括傳統的命令列或圖形使用者介面 (gui) 應用程式,也包括基於 asp.net 所提供的最新創新的應用程式(如 web 窗體和 xml web services)。

然後我們來看看託管**的執行過程:

1、選擇編譯器:

為獲得公共語言執行庫提供的優點,必須使用乙個或多個針對執行庫的語言編譯器,如 visual basic、c#、visual c++、jscript 或許多第三方編譯器(如 eiffel、perl 或 cobol 編譯器)中的某乙個。

由於執行庫是乙個多語言執行環境,因此它支援各種資料型別和語言功能。您所用的語言編譯器確定可用的執行庫功能,而您使用這些功能設計**。編譯器(而不是執行庫)建立**必須使用的語法。如果您的元件必須完全能夠被用其他語言編寫的元件使用,您的元件的匯出型別必須只公開公共語言規範 (cls) 中包括的語言功能。

2、編譯,將源**翻譯為microsoft中間語言(msil)並生成所需的元資料。

3、在執行時,實時 (jit) 編譯器將 msil 翻譯為本機**。在此編譯過程中,**必須通過驗證過程,該過程檢查 msil 和元資料以檢視是否可以將**確定為型別安全。

4、執行**:公共語言執行庫提供使執行能夠發生以及可在執行期間使用的各種服務的結構

什麼是託管元資料?

什麼是託管元資料?託管元資料是一種允許管理員建立的垂直分級術語的集合,可以在文件庫和列表中作為欄使用,但是只在sharepoint 2010 server中支援。使用託管元資料,你可以建立分級結構的列表,將產品分組到不同的類別 建立類別的術語然後在其下建立產品術語 或是產品分組。你可以選擇這些術語是...

為什麼使用C 託管擴充套件

為什麼使用c 託管擴充套件 清華大學出版社論壇 微軟既要考慮visual c 的相容性,又要讓傳統c 語言具備足夠的能力開發.net應用程式,於是在新版本的visual c 中,引入了c 託管擴充套件。在整個visual studio開發套件中,微軟為了迎合.net應用程式開發模式的要求,幾乎對每個...

拖不託管是浮雲 飄過託管的邊界

寫這篇博文為了說明如何 託管 與 非託管 互用問題。具體來講包括 如何在託管 中使用非託管 如何在託管 中使用非託管dll 如何在非託管 中使用託管dll以及託管 直接給出最直接的描述 1.託管 中使用非託管 給出個可行示例,簡單的說明下下面這段 的功能 灰度化 影象。託管 呼叫非託管 debugl...