C#基础之CLR的执行模型(一)

一、将源代码编译成托管模块

 

  • CLR是什么?

全称是Common Language Runtime,即公共语言运行时。

所谓公共,也就是说,它支持多种编程语言。这正是它的牛逼之处,想一想,你可以用你所擅长的语言来实现功能,甚至能将多种语言杂揉在一起,各司其职,多酷啊!

 

  • 微软提供了好几个面向运行时的编译器,你造吗?

C++/CLI、C#、Visual Basic、F#、Iron Python、Iron Ruby。除此之外,还有一个中间语言汇编器IL(Intermediate Language)。

这些编译器最终会将源代码,编译成托管模块。

其中C++编译器是最强的,因为它允许开发人员同时写托管和非托管代码,并生成到同一个模块中!最最关键的是,只有C++编译器才有这功能,别的编译器都没有!独一无二啊有米有!

是时候学好C++跟人装逼了!

除了微软,其他机构也提供面向CLR的各种编译器。

 

  • 托管模块是啥?

它是标准的32位Windows可移植执行体文件,也就是传说中的PE32,也可以是标准的64位Windows可移植执行体文件,即PE32+,具体看编译时CPU的设置了。

据说托管程序集会利用Windows的数据执行保护和地址空间布局随机化,以增强整个系统的安全性。

 

  • 托管模块中都有啥? 
托管模块的各个部分
组成部分说明
PE32或PE32+

它决定了程序是在32位系统,还是64位系统上运行。

除此之外,它还标识了文件类型(GUI、CUI、DLL)和生成时间。若是包含本机CPU代码的模块,还会包含与本机CPU代码有关的信息。

CLR头包含CLR版本,托管模块入口方法的MethodDef元数据token,以及模块的元数据、资源、强名称、标志等。
元数据每个托管模块都有元数据表。主要有两种表,一是描述源代码中定义的类型和成员的表,一是描述源代码引用的类型和成员的表。
IL代码编译后的代码。在运行时,CLR将它编译成本机CPU指令。

 

 

 

 

 

 

 

 

 

  • 元数据都有啥用?

多了去了,比如它包含了C/C++的类型和成员信息,从而免去了读取C/C++库文件,比如VS的智能感知,比如类型验证,比如序列化,比如垃圾回收器跟踪对象生存期。

转载于:https://www.cnblogs.com/yyzj/p/6180858.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值