.net运行原理
2015-08-21 18:03
232 查看
run-time)和运行原理(CPU-specific binary or pseudo-code)的疑问。 这里是一个简单的回答:当你编译一个C#应用程序或任何一种CLS(Commmon Language Specification)兼容的语言时,它将首先被编译成一种称为il (Intermediate Language)的伪代码(pseudo-code)。在这个应用程序第一次 被运行的时候,这种il代码将被编译成机器代码,用于执行。也就是说从源代码 到得到运行结果,进行了两次编译。事实上,只有那些被真正使用的函数代码 才会被进行第二次编译。下面揭示开发过程中被隐藏起来的细节: 1) 你用c#开发一些程序 2) 用C#编译器或CLS兼容的编译器编译成exe 3) 编译器将生成的il代码和附加信息(manifest)放入拥有一个标准PE头的Win32 可执行文件的只读部分。 4) 编译器在创建这个可执行文件时导入(import)一个名为_CorExeMain的函数。 这个函数是.net ee(execution engine)--.net运行期引擎的入口函数。 5) 当执行这个Win32可执行文件时,因为其主要是依赖于dll的PE文件,操作系 统将会调用位于MSCorEE.dll中的_CorExeMain函数。 6) 操作系统通过PE文件里的进入点,调用MSCorEE.DLL。并能保证在Windows里 可以有很多程序同时运行。 7) 因为操作系统不能执行.NET IL代码,EXE里的进入点只是简单的中介,它将 指示操作系统调用_CorExeMain函数。 8) 随后_CorExeMain函数开始解释位于PE文件中的IL代码。 9) 因为IL是不能被直接执行的, .NET EE使用称为JITter (Just In Time compiler) 这一即时编译过程只在第
相关文章推荐
- Scanner类中的微妙关系
- mt7601 Build Instructions
- PLX9056 PCI卡驱动:PCI 总线
- 学习泰课的Unity3D黑黯之光RPG游戏开发(二)——课时1至课时16
- JUnit 执行顺序
- 【电子电路】上拉电阻与下拉电阻有什么作用
- js对象 函数
- HTTP返回状态值及用途
- 土木狗自己写的土石方计算程序,控制台程序,只因太菜。。。
- 具有 Button 风格的 Panel(覆盖TCustomPanel的Paint函数,用到了ThemeServices)
- Unity3d之协程自实现测试
- mysql查询各种类型的前N条记录
- GIT的标准文档 使用和服务介绍
- nginx的web连接出现过多的TIME_WAIT
- Longest Common Prefix
- Posix信号灯
- [经典算法] 字符串相似度-编辑距离
- WINDOWS和Linux上安装php7 alpha 并安装 yaf
- linux权限管理
- 谈谈Android App运行时文件系统路径问题