CLR執行模型

2022-02-25 13:42:33 字數 1782 閱讀 2345

clr(common language runtime):公共語言執行時,是乙個可由多種程式語言使用的"執行時";

在執行時,clr根本不關心開發人員用的是哪一種語言來變寫**,它只關注語言是否是面向clr(面向執行時)的.

記憶體管理、程式集載入、安全性、異常處理和執行緒同步。

3:如圖:

無論是用的是哪一種編譯器,結果都是乙個託管模組(managed module),託管**時乙個標準的32位/64位microsoft windows可移植執行體(pe32/pe32+)檔案.

本地**編譯器,生成的是面向特定cpu架構(x86,x64或ia64)的**.相反,每個面向clr的編譯器生成的都是il(中間語言)**,il**也被稱為託管**.

除了生成il,面向clr的每個編譯器還要在每個託管模組中生成完整的元資料,元資料是一組資料表.其中一些資料表描述了模組中定義的內容,元資料其實就是編譯器所生成的一些完整資料.

4:clr實際是不和模組一起工作的,它是和程式集一起工作的.

5:載入公共語言執行時

我們生成的每個程式集既可以是乙個可執行應用程式,也可以是乙個dll,最終是由clr管理這些程式集中的**的執行,所以必須在執行機器中安裝.net framework.windows一些版本系統已經內建打包了好了.net framework.不過需要我們手動的開啟.可以在控制面板中進行啟動在此就不做詳細解釋.作為開發人員,這是不需要解釋的.

執行乙個方法,第一必須把它的il轉換為本地cpu指令,這是clr的jit的本質.

如圖:就在main方法執行之前,clr會檢測main的**引用的所有的型別,這導致clr分配乙個內部資料結構,用於管理對所引用的型別的訪問.

乙個方法只有在首次呼叫時,才會造成一些效能損失,以後對該方法的所有呼叫都以本地**的形式全速執行.無需重新驗證il並把它編譯成本地**.

jit編譯器將本地cpu指令儲存到動態記憶體中,一旦應用程式終止,編譯好的**也會被丟棄,所以,如果將來再次執行應用程式,或者同時啟動應用程式的兩個例項,jit編譯器必須再次將il編譯成本地指令.

il是基於棧的,所以它的所有指令都要將運算元壓入(push)乙個執行棧,並從棧彈出(pop)結果.由於il沒有提供操作暫存器的指令,所以人們可以很容易地建立新的語言和編譯器,生成clr的**.il指令是無型別的.il的好處在於是健壯和安全的,因為它編譯為cpu指令,cpu會進行驗證是否安全.

fcl(framework class library):是一組dll程式集的統稱,其中含有很多的型別定義,每個型別都公開了一些功能.

web服務:web service 技術或者wcf技術,可以非常簡單的處理通過internet傳送的訊息.

web窗體應用程式:web form

windows應用程式:開發windows gui應用程式.

富internet應用程式:silverlight技術,可以構建通過internet來部署的gui應用程式.這種程式能在web瀏覽器的內部或外部執行,還可以在非windows作業系統與移動裝置傻瓜執行.

window控制台:提供簡單快捷方便的方式,生成應用程式,編譯器.

window服務:可以通過.net framework 生成"服務"應用程式.

資料庫儲存過程:編寫儲存過程

元件庫:.net frameword允許生成獨立的程式集(元件),其中包含的型別可以輕鬆整合到任意的程式庫中.

CLR執行模型

然後,將若干個託管模組合併成assembly.載入clr 在 system32 下有mscoreee.dll 說明已經安裝.首次執行一方法 在執行 main 之前,clr 建立乙個內部 ds來儲存 code 所引用的 type.呼叫方法時 jit complier將il 編譯為本地指令 在 am的元...

CLR的執行模型

公共語言執行時 common language runtime,clr 是乙個可由多種程式語言使用的 執行時 它負責在執行時管理 提供記憶體管理 異常處理 執行緒管理等核心服務,同時又確保 的安全性和準確性。原始碼的編譯過程如圖所示,使用支援clr的語言建立源 檔案,然後通過相應的編譯器對原始碼進行...

CLR的執行模型

第一章 clr的執行模型 本章內容 microsoft net framework引入了許多新概念 技術和術語。本章概述了.net framework如何設計,介紹了framework包含的一些新技術,並定義了今後要用到的許多術語。還要展示如何將源 生成為乙個應用程式,或者生成為一組可重新分發的元件...