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

首頁 > 編程 > .NET > 正文

精品賞析:一個.NET程序在編譯和運行時都做了些什么?

2024-07-10 13:02:12
字體:
供稿:網(wǎng)友


收集最實用的網(wǎng)頁特效代碼!

一個.net程序在編譯和運行時都做了些什么?
================================================================
在新聞組和郵件列表里有大量關(guān)于一個.net程序的設(shè)計編譯(design-time or
run-time)和運行原理 (cpu-specific binary or pseudo-code)的疑問。

這里是一個簡單的回答:當(dāng)你編譯一個c#應(yīng)用程序或任何一種cls(commmon
language specification)兼容的語言時,它將首先被編譯成一種稱為il
(intermediate language)的偽代碼(pseudo-code)。在這個應(yīng)用程序第一次
被運行的時候,這種il代碼將被編譯成機器代碼,用于執(zhí)行。也就是說從源代碼
到得到運行結(jié)果,進行了兩次編譯。事實上,只有那些被真正使用的函數(shù)代碼
才會被進行第二次編譯。下面揭示開發(fā)過程中被隱藏起來的細節(jié):

1) 你用c#開發(fā)一些程序
2) 用c#編譯器或cls兼容的編譯器編譯成exe
3) 編譯器將生成的il代碼和附加信息(manifest)放入擁有一個標(biāo)準(zhǔn)pe頭的win32
可執(zhí)行文件的只讀部分。
4) 編譯器在創(chuàng)建這個可執(zhí)行文件時導(dǎo)入(import)一個名為_corexemain的函數(shù)。
這個函數(shù)是.net ee(execution engine)--.net運行期引擎的入口函數(shù)。
5) 當(dāng)執(zhí)行這個win32可執(zhí)行文件時,因為其主要是依賴于dll的pe文件,操作系
統(tǒng)將會調(diào)用位于mscoree.dll中的_corexemain函數(shù)。
6) 操作系統(tǒng)通過pe文件里的進入點,調(diào)用mscoree.dll。并能保證在windows里
可以有很多程序同時運行。
7) 因為操作系統(tǒng)不能執(zhí)行.net il代碼,exe里的進入點只是簡單的中介,它將
指示操作系統(tǒng)調(diào)用_corexemain函數(shù)。
8) 隨后_corexemain函數(shù)開始解釋位于pe文件中的il代碼。
9) 因為il是不能被直接執(zhí)行的, .net ee使用稱為jitter (just in time compiler)
的即時編譯器將il代碼編譯成本地cpu機器代碼用于執(zhí)行。這一即時編譯過程
只在第一次執(zhí)行的時候進行。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 册亨县| 繁峙县| 禹城市| 廊坊市| 金堂县| 达日县| 四子王旗| 石阡县| 汶川县| 元氏县| 孝昌县| 弥勒县| 安新县| 进贤县| 青河县| 银川市| 洛隆县| 东丽区| 澎湖县| 凌海市| 论坛| 察哈| 滨海县| 同德县| 张北县| 齐齐哈尔市| 聂荣县| 乌拉特前旗| 通江县| 浪卡子县| 方山县| 通山县| 麻江县| 绵阳市| 宜州市| 上虞市| 崇州市| 堆龙德庆县| 华亭县| 平顶山市| 南和县|