c#源码的执行过程详解

作者:张三你好 时间:2023-10-01 17:03:37 

要讲到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#源码的执行过程详解

来源:https://www.cnblogs.com/wupo/p/9373564.html

标签:c#,执行
0
投稿

猜你喜欢

  • Java中ArrayList和LinkedList之间的区别_动力节点Java学院整理

    2023-03-30 18:16:29
  • C# Socket编程实现简单的局域网聊天器的示例代码

    2022-10-01 19:45:45
  • 教你用Java在个人电脑上实现微信扫码支付

    2023-07-22 20:52:15
  • 关于EntityWrapper的in用法

    2023-11-29 09:02:11
  • SpringMVC RESTFul实体类创建及环境搭建

    2022-12-25 18:23:06
  • C#邮件定时群发工具Atilia用法实例

    2022-06-13 11:50:24
  • Android中删除Preference详解

    2021-08-09 21:41:19
  • 浅谈一下Servlet的定义以及运行原理

    2023-08-14 10:50:07
  • Unity多屏幕设置的具体方案

    2023-12-12 12:05:24
  • Android编程开发之Spinner组件用法

    2022-09-02 17:55:26
  • Java中的泛型详解

    2023-11-02 17:51:56
  • 一篇文章带你入门Java基本概念

    2023-11-26 01:17:08
  • Java String不可变性实现原理解析

    2023-11-09 23:15:53
  • C#实现多线程的同步方法实例分析

    2021-11-01 11:56:42
  • C# winfrom 模拟ftp文件管理实现代码

    2023-07-15 16:29:48
  • Java JDK动态代理实现原理实例解析

    2022-04-23 05:19:10
  • static关键字有何魔法?竟让Spring Boot搞出那么多静态内部类(推荐)

    2022-07-03 20:26:29
  • C#实现Base64处理的加密解密,编码解码示例

    2023-07-15 12:11:31
  • 详解Java枚举为什么是单例模式的最佳选择

    2022-07-16 20:42:47
  • Java实现简单的酒店管理系统

    2022-05-10 01:32:12
  • asp之家 软件编程 m.aspxhome.com