91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c#源碼的執行過程詳解

發布時間:2020-09-04 06:53:03 來源:腳本之家 閱讀:152 作者:張三你好 欄目:編程語言

要講到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#源碼的執行過程詳解

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿瓦提县| 崇明县| 玉树县| 南充市| 靖州| 灌阳县| 温泉县| 湄潭县| 德昌县| 福鼎市| 河曲县| 曲水县| 崇阳县| 买车| 双峰县| 河北区| 绩溪县| 北川| 浦江县| 安乡县| 揭阳市| 隆德县| 衡水市| 广昌县| 天柱县| 平塘县| 太白县| 平南县| 泉州市| 绍兴市| 运城市| 宜兴市| 库伦旗| 昌江| 澄城县| 荣昌县| 泗水县| 西丰县| 涿鹿县| 长沙市| 台东县|