.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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值