乙個C 程式的執行過程

2022-01-23 13:27:02 字數 759 閱讀 1706

可能很多人都知道我們把程式打包成dll就丟出去了,但是裡面的具體的執行過程是怎麼樣的呢。

程式集是由元資料和il組成的。il是和cpu無關的語言,是微軟的幾個專家請教了外面的編譯器的作則,開發出來的。il比大多數機器語言都要高階一點。il能夠訪問和操作物件型別,並提高了指令來初始化物件,呼叫物件上的虛方法以及直接運算元組元素。

比如下面這個例子

class

program

}

這是乙個很普通的例子,首先我們把這個程式編譯了生成了dll。然後再通過reflector來看看我們的dll是怎麼樣的。可以看到我們的**變成了前面所說的il**。

為了執行這個方法,首先必須要先把方法裡面的il**轉換為本機的cpu指令。這就是clr裡面的jit(即時)編譯器的職責。

jit的功能主要是這樣的

1、在負責實現型別的(console)程式集的元資料中查詢被呼叫的方法(writeline)

2、從元資料裡面找到該方法的il

3、分配記憶體塊

4、將il編譯成本機的cpu指令,然後把這些東西扔進步驟三分配的記憶體塊裡面。

5、在type表中修改對應的方法,讓她指向步驟三分配的記憶體塊

6、調到記憶體塊執行本機**。

當你第二次呼叫console.writeline的時候,由於之前已經對writeline方法進行了驗證和編譯,所以到了第二次的話,就直接執行記憶體中的**塊了。

方法在首次被呼叫的時候,會有一些效能損失。以後對該方法的所有呼叫都以本機**的形式全速執行。

乙個程式的執行過程

1.資訊在計算機的中表示 我們知道,資訊在計算機中都是用0或 1表示的。計算機通過這些位資訊以及上下文來解讀這些 0 1。也即 計算機中的資訊 位 上下文。我們輸入的hello程式就是由0 1組成的序列,將這些位8位組織成乙個位元組,每個位元組用來表示乙個文字字元。ascii碼給出了一種字元與數字的...

詳解乙個程式的執行過程

2.預處理器 主要負責文字的替換 巨集展開 刪除注釋等一些簡單的工作,經過預處理後得到的才是真正的原始碼 3.編譯器 檢查 分析我們所寫的 是否符合程式語言的規範 如果你所寫的 符合要求,那麼編譯器就會將原始檔之中的 轉換為彙編 一般不特指的話,可以將編譯器理解為預處理器 編譯器 彙編器的組合 4....

乙個簡單程式的建立與執行過程

在windows下建立乙個簡單程式的過程大概是這樣幾步 1.編寫源 一般是在像vs這樣的整合開發環境中,但也可以在乙個文字檔案中直接敲 2.編譯源 就是把你能認識的 轉化成機器能認識的010這樣的 一般是一成乙個obj目標檔案.實嚴格來說這一步是包括編譯和彙編兩步.先是編譯成組合語言,然後再用彙編器...