源代码是如何编辑生成托管代码,托管代码包含那些内容(一)

    我们平时写的.cs文件.aspx.cs是怎么样编辑并且在我们电脑上面跑起来的呢,带着这些问题,看CLR via C#第一章,就帮我们解答了。

    源代码是如何编辑生成托管代码,托管代码包含那些内容(一)_第1张图片

上面图只是托管模块的一部份。

C#源代码------》是通过C#编译器------》编译成托管模块。  CLR 在运行时,将托管模块的中间语言,编译成本地的CPU指令。


托管模块组合为程序集

编译器将托管模块组合成程序集,编译器打交道的是程序集,程序集包含,一个或者多个托管模块,或者源文件.

托管模块,源文件 被编译器生成一个PE32(+)文件,也就是程序集。PE32文件中包含mainifest,另一组元数据表.这个元数据表中包含,托管模块和源文件是如何组成程序集。

源代码是如何编辑生成托管代码,托管代码包含那些内容(一)_第2张图片


3. EXE或DLL文件启动CLR运行时


源代码是如何编辑生成托管代码,托管代码包含那些内容(一)_第3张图片

4. 程序集执行

IL代码要通过即时编译器(JIT)转换成本地CPU指令。

方法第一次调用过程?

  • 1. 当程序第一次运行时,会调用JITCompiler函数,它可以知道调用了那些方法,以及定义该方法的类。
  • 2. 然后JITCompiler函数在元数据中搜索该IL代码的位置,验证后转换成本地CPU指令。将指令保存在动态分配的内存中
  • 3. JITCompiler将被调用方法地址改为第2步的内存地址
  • 4. 跳转到上述代码块上执行代码
  • 5. 执行完成后返回

IL是基于堆栈的语言,而且是无类型的。IL的好处之一是提高程序的健壮性,在将IL代码转换成本地CPU指令时,CLR将执行安全验证的过程,验证失败则会抛出异常。


以上仅个人观点,如有不对请指证。

   


你可能感兴趣的:(C#,dll,exe,语言,编译器)