底層運行機制CLR-C#

CLR的執行模型(C#)html

流程:編程

1.將源代碼編譯成委託代碼——>2.將委託代碼合併成程序集——>3.執行程序集代碼——>4.加載公共語言進行時安全

注:CLR(Common Language公共語言)CLR是一個可由多種編程語言使用的「運行時」。CLR的核心功能(e.g.內存管理、程序集加載、安全性、異常處理、線程同步等),可由面向CLR的全部語言使用。編程語言

一、將源代碼編譯成委託模塊:工具

    CLR根本不關心開發人員用那一種語言來寫源代碼,說明我咱們寫C#代碼的時候確定還通過必定的步驟才能跟CLR,因而就須要相應的面向CLR的、能夠編譯C#代碼的編譯器,以便CLR能夠識別你寫的東西。這個編譯器會檢查語法和分析源代碼,產生的是一個託管模塊線程


注:htm

 託管模塊是一個能夠在CLR中執行的PE(Portal Executable)文件。內存

    書中介紹託管模塊由PE32或PE32+頭、CLR頭、元數據、IL(中間語言)代碼。看的時候我的以爲理解元數據和IL比較重要。資源

    元數據:包含兩種類型的元數據表:一個表描述源代碼中定義的類型和成員;另外一個表描述源代碼引用的類型和成員 。開發

    IL(中間語言)代碼:編譯器編譯源代碼時生成的代碼。在運行時,CLR將IL編譯成本地CPU指令。(IL代碼有時稱爲託管代碼,由於CLR要管理它的執行)

 

二、將託管代碼合併成程序集:

(CLR實際不和模塊一塊兒工做。相反,他是和程序集一塊兒工做的)

前面說到CLR不會識別你的具體語言,須要相應編譯器生成相應的託管模塊。這會又說實際不和模塊一塊兒工做,引入了程序集的概念。文中說程序集是一個抽象的概念。

 

託管模塊(IL和元數據)、資源文件(.jepg,.gif,.html等)——>將多個託管模塊和資源文件合併成程序集的工具(C#編譯器    CSC.exe)——>程序集(清單:描述程序集中的文件集)

三、加載公共語言運行時:

你生成的程序集既能夠是一個可執行的應用程序,也能夠是一個DLL(其中含有一組可執行程序使用的類型)。最終由CLR管理這些程序集中的代碼的執行。

  加載公共語言進行時時window的事,咱們能夠考慮在window的一系列以後會初始化CLR,而後加載exe程序集,而後調用其入口方法Main()。隨即,託管的應用程序將啓動並運行。

 

四、執行程序集代碼:

在第一步,即源代碼編譯成託管模塊的時候提到:元數據老是和包含IL代碼的文件關聯,因爲編譯器同時生成元數據和代碼,把他們綁定一塊兒,並嵌入最終生成的託管模塊,因此元數據和他描述的IL代碼用慣不會失去同步

  

  可想而知,當你調用入口方法(Main)的時候,元數據也跟着進來了,他們是一對好基友

相關文章
相關標籤/搜索