a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

c#源碼的執行過程詳解

2019-10-29 21:01:15
字體:
來源:轉載
供稿:網友

要講到C#源碼的執行過程 首先要提下程序集,因為Clr并不是和托管摸塊打交道的,而是和程序集(dll,exe)

1、從哪里來

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

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

c#源碼,執行過程

2、執行過程

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

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

3.Main方法內部執行

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

首次運行Main方法的試試JITCompiler會被調用,在這個方法里面1,負責在方法的實現類型中(console)程序集元數據中查詢該方法的IL方法 2,動態分配內存塊 3,把IL編譯成本機Cpu的指令,存儲到動態分配的空間里面

4,修改這個條目的地址,使它指向動態分配的地址 5.跳轉到內存塊中的本機代碼執行,這時候執行的就是IL代碼的cpu機器碼

5.在次執行Console.WriteLine的時候,就不會運行JITCompiler,直接運行機器碼

c#源碼,執行過程


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久国产成人午夜av影院宅 | 亚洲一区在线电影 | 日韩欧美视频一区二区三区 | 国产精品综合一区二区 | 日韩国产欧美一区 | 中文字幕在线一区二区三区 | 得得啪在线视频 | 国产精品一区二区三区四区 | 国产拍揄自揄精品视频麻豆 | 久久亚洲精品国产亚洲老地址 | 最新国产在线 | 黄色免费网站 | 国产精品久久久久久福利一牛影视 | 草逼视频免费观看 | 一级黄色录像视频 | 黄色毛片一级 | 国产激情在线视频 | 亚洲影视一区二区 | 欧美日韩国产免费一区二区三区 | 日韩一区中文字幕 | 欧美成人精品一区二区男人看 | 精品在线一区二区 | 国产美女精品一区二区 | 欧美一级在线 | 欧美精品一区久久 | 亚洲欧洲一区二区三区 | 国产高清视频一区 | 精品国产色 | 黄色片免费看 | 成人久久久精品乱码一区二区三区 | 亚洲视频中文字幕 | 最新午夜综合福利视频 | 国产成人不卡 | 免费a大片 | 午夜a v电影 | 亚洲精品成人av | av性色| 久草新在线| 男人天堂视频网 | 久久亚洲二区 | 青青青国产 |