可能很多人都知道我們把程式打包成dll就丟出去了,但是裡面的具體的執行過程是怎麼樣的呢。
程式集是由元資料和il組成的。il是和cpu無關的語言,是微軟的幾個專家請教了外面的編譯器的作則,開發出來的。il比大多數機器語言都要高階一點。il能夠訪問和操作物件型別,並提高了指令來初始化物件,呼叫物件上的虛方法以及直接運算元組元素。
比如下面這個例子
classprogram
}
這是乙個很普通的例子,首先我們把這個程式編譯了生成了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目標檔案.實嚴格來說這一步是包括編譯和彙編兩步.先是編譯成組合語言,然後再用彙編器...