国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

c#源碼的執(zhí)行過程詳解

2020-01-24 00:16:18
字體:
供稿:網(wǎng)友

要講到C#源碼的執(zhí)行過程 首先要提下程序集,因?yàn)镃lr并不是和托管摸塊打交道的,而是和程序集(dll,exe)

1、從哪里來

程序集是由一個或者多個托管模塊以及 資源文件等共同組成的,C#編譯器(csc.exe)再把源碼編程成IL代碼和元數(shù)據(jù)的時候,會進(jìn)一步連同資源文件合并成程序集,

實(shí)際上就是個PE32文件,里面包含一個清單文件 和多個托管模塊和資源(如圖),另外程序集中還有一些自描述信息。

2、執(zhí)行過程

編譯器生成好程序集以后,如果是可執(zhí)行的程序集,會在Main方法執(zhí)行之前,window會預(yù)先讀取程序集的頭文件(pe32),如果是x86則開一個32位的進(jìn)程,x64的就開一個64位的進(jìn)程

然后在進(jìn)程空間里面加載MSCOREE.DLL的x86 或者x64版本或者arm版本,然后進(jìn)程的主線程會調(diào)用MSCOREE.DLL的一個方法,初始化Clr,而Clr會加載程序集exe,再調(diào)用其入口方法Main。

3.Main方法內(nèi)部執(zhí)行

在Main執(zhí)行之前,Clr 會檢測出方法引用的所有類型,(Console),然后在內(nèi)存中分配對應(yīng)數(shù)據(jù)類型的空間,這個地址里面包含著這個類型所有的方法聲名,每一項(xiàng)都對應(yīng)著Clr里面的一個未編檔函數(shù)(JITCompiler)

首次運(yùn)行Main方法的試試JITCompiler會被調(diào)用,在這個方法里面1,負(fù)責(zé)在方法的實(shí)現(xiàn)類型中(console)程序集元數(shù)據(jù)中查詢該方法的IL方法 2,動態(tài)分配內(nèi)存塊 3,把IL編譯成本機(jī)Cpu的指令,存儲到動態(tài)分配的空間里面

4,修改這個條目的地址,使它指向動態(tài)分配的地址 5.跳轉(zhuǎn)到內(nèi)存塊中的本機(jī)代碼執(zhí)行,這時候執(zhí)行的就是IL代碼的cpu機(jī)器碼

5.在次執(zhí)行Console.WriteLine的時候,就不會運(yùn)行JITCompiler,直接運(yùn)行機(jī)器碼

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 嘉峪关市| 衡东县| 新蔡县| 吴江市| 宝兴县| 商丘市| 阿拉善右旗| 九寨沟县| 靖宇县| 新蔡县| 青冈县| 丰顺县| 宁明县| 肥城市| 弋阳县| 昌乐县| 浪卡子县| 廉江市| 奎屯市| 麻城市| 垣曲县| 县级市| 邢台县| 肇源县| 茂名市| 昌江| 竹山县| 萨迦县| 阿克陶县| 宜君县| 邓州市| 萍乡市| 镇赉县| 安顺市| 海伦市| 郸城县| 广饶县| 宜阳县| 英吉沙县| 岗巴县| 洪江市|