c#源代码的编译过程,c#程序源代码,c#源码的执行过程详解

c#源代码的编译过程,c#程序源代码,c#源码的执行过程详解

在这篇文章中,我给大家详细介绍了c#源代码的实现过程,有需要的朋友可以借鉴一下。

说到C#源代码的执行过程,首先要提到汇编,因为Clr处理的不是托管块,而是汇编(dll,exe)。

1、从哪里来

程序集由一个或多个托管模块和资源文件组成。当C#编译器(csc.exe)将源代码编程为IL代码和元数据时,它将进一步与资源文件组合成一个程序集。

其实就是一个PE32文件,里面包含了一个manifest文件,几个托管的模块和资源(如图),以及程序集中的一些自描述信息。

2、执行过程

编译器生成汇编后,如果是可执行汇编,在Main方法执行前,window会提前读取汇编的头文件(pe32);如果是x86,会打开32位进程;如果是x64,会开启64位进程。

然后在进程空间加载x86或者x64版本或者arm版本的MSCOREE.DLL,然后进程的主线程会调用MSCOREE.DLL的一个方法来初始化Clr,Clr会加载assembly exe然后调用它的入口方法Main。

3.Main方法内部执行

在执行Main之前,Clr将检测该方法引用的所有类型,(Console),然后在内存中分配相应数据类型的空间。这个地址包含这种类型的所有方法信誉,每一项都对应于Clr中的一个JIT编译器。

将调用首次尝试运行Main方法的JIT编译器。在这个方法中,1,负责在方法的实现类型(控制台)的汇编元数据中查询IL方法2,动态分配内存块3,将IL编译成本地Cpu的指令,存储在动态分配的空间中。

4,修改这个条目的地址,以便它指向动态分配的地址。5.跳转到内存块中的本机代码执行,此时会执行IL代码的cpu机器码。

5.在次执行Console.WriteLine的时候,就不会运行JITCompiler,直接运行机器码

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 设计一个简单的C#控制台应用程序,C#控制台程序,C# 创建控制台应用程序
  • 深入解析windows第8版,深入解析C#(第4版)
  • 数组代码,c# 数组操作,C# 数组实例介绍(图文)
  • 学会C#要多久,学会c#要多久,c#学习之30分钟学会XAML
  • 回溯法01背包问题c,回溯法求解01背包问题伪代码,C#使用回溯法解决背包问题实例分析
  • xml文件转义字符,xml转意字符,C# XML中的转义字符操作
  • winform 进度条控件,c# 进度条使用
  • winform 进度条控件,c# 进度条使用,C#使用winform实现进度条效果
  • winform backgroundworker,c# isbackground
  • winform backgroundworker,c# isbackground,C# BackgroundWorker用法详解
  • lua与c#交互,lua c#
  • lua与c#交互,lua c#,ToLua框架下C#与Lua代码的互调操作
  • linq c#,linq原理 c#
  • linq c#,linq原理 c#,c#中LINQ的基本用法实例
  • java decimal保留两位小数,sql中decimal函数保留2位小数,C#中decimal保留2位有效小数的实现方法
  • 留言与评论(共有 条评论)
       
    验证码: