底層執行機制CLR C

2021-08-17 12:40:03 字數 1422 閱讀 5224

**:

clr的執行模型(c#)

流程:1.

將源**編譯成委託**

——>2.

將委託**合併成程式集

——>3.

執行程式集**

——>4.

載入公共語言進行時

注:clr(common language公共語言)clr是乙個可由多種程式語言使用的「執行時」。clr的核心功能(e.g.記憶體管理、程式集載入、安全性、異常處理、執行緒同步等),可由面向clr的所有語言使用。

1、將源**編譯成委託模組:

clr根本不關心開發人員用那一種語言來寫源**,說明我我們寫c#**的時候肯定還經過一定的步驟才能跟clr,於是就需要相應的面向clr的、可以編譯c#**的編譯器,以便clr可以識別你寫的東西。這個編譯器會檢查語法和分析源**,產生的是乙個託管模組

注:

託管模組是乙個可以在clr中執行的pe(portal executable)檔案。

書中介紹託管模組由pe32或pe32+頭、clr頭、元資料、il(中間語言)**。看的時候個人覺得理解元資料和il比較重要。

元資料:包含兩種型別的元資料表:乙個表描述源**中定義的型別和成員;另乙個表描述源**引用的型別和成員 。

il(中間語言)**:編譯器編譯源**時生成的**。在執行時,clr將il編譯成本地cpu指令。(il**有時稱為託管**,因為clr要管理它的執行)

2、將託管**合併成程式集:

(clr實際不和模組一起工作。相反,他是和程式集一起工作的)

前面說到clr不會識別你的具體語言,需要相應編譯器生成相應的託管模組。這會又說實際不和模組一起工作,引入了程式集的概念。文中說程式集是乙個抽象的概念。

託管模組(il和元資料)、資源檔案(.jepg,.gif,.html等)——>將多個託管模組和資源檔案合併成程式集的工具(c#編譯器    csc.exe)——>程式集(清單:描述程式集中的檔案集)

3、載入公共語言執行時:

你生成的程式集既可以是乙個可執行的應用程式,也可以是乙個dll(其中含有一組可執行程式使用的型別)。最終由clr管理這些程式集中的**的執行。

載入公共語言進行時時window的事,我們可以考慮在window的一系列之後會初始化clr,然後載入exe程式集,然後呼叫其入口方法main()。隨即,託管的應用程式將啟動並執行。

4、執行程式集**:

在第一步,即源**編譯成託管模組的時候提到:元資料總是和包含il**的檔案關聯,由於編譯器同時生成元資料和**,把他們繫結一起,並嵌入最終生成的託管模組,所以元資料和他描述的il**用慣不會失去同步

可想而知,當你呼叫入口方法(main)的時候,元資料也跟著進來了,他們是一對好**

find package 的底層執行機制

馬斯克的龍飛船中的作業系統是linux,軟體工程使用的是c 用gcc和gdb去除錯 c 如此強大和靈活,所以有必要了解一下c 工程是如何make的.我們在寫cmakelists.txt時候需要查詢第三方庫的標頭檔案和庫檔案,通常直接是執行 find package 然後就會有對應的 和 如果find...

session執行機制

session機制是一種伺服器端的機制,伺服器使用一種類似於雜湊表 的結構 也可能就是使用 雜湊表 來儲存資訊。當程式需要為某個客戶端的請求建立乙個session的時候,伺服器首先檢查這個客戶端的請求裡是否已包含了乙個session標識 稱為sessionid,如果已包含乙個sessionid則說明...

try catch finally執行機制

finally的執行 如下的程式所示,注釋中是執行的順序 public class test public static string test finally public static string test1 finally其實是僅在return 語句執行前執行,如果return 乙個函式,那...