.net 编译过程

Rosyln
上面这段代码在被运行之后,他首先做的第一件事情就是把它这个.CS源代码利用Rosyln编译器把它给转换成二进制文件。这个二进制文件里面包含了控制台类里面的所有信息。非托管部分包含了(数据目录,文件头,以及可选头【实际上这个可选头就是之前COM所占用的虚拟地址和虚拟长度】)托管不分包括(元数据【包括了.net大小版本号以及数据流长度】),数据流【命名空间,函数名,类名。程序集,模块集,方法描述,方法RVA以及返回值,声明类型等等】两个个部分)。一般的所谓IL数据也是通过这个二进制文件获取到的。

CLR
当通过Rosyln编译到了二进制文件之后,这个二进制文件就会被CLR所加载,通过一系列操作之后。(本节介绍的重点)

RyuJit
这个是jit编译阶段,比如CLR加载了一个Rosyln编译的二进制文件里面的函数,那么这函数就会被封装位函数描述符结构体和前置码被传递到RyuJit进行机器码方向的编译,编译完成的结果会修改前置码或则函数描述符结构体的最后一位(至于是那一个,这个东西视乎CLR版本而定)。

以上就是一个整体的编译过程,经过大约四个步骤 Source Code(C#代码)-》Rosyln(IL 代码) -》CLR ->RyuJit。这每一个过程都极其复杂。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页

打赏作者

江湖评谈

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值