关于C#,CLR,.NET,托管的相关理解

.NET Framework包含了CLR、类库及相关语言编译器。

运行时,C#源码,首先被.NET的C#的编译器编译成中间语言MSIL(Microsoft Intermediate Language),是一种介于高级语言和机器语言中间的语言,也叫本地代码,并加上元数据(数据的数据,包含源代码中所有元素的描述)。然后,MSIL在.NET的CLR(Common Language Runtime)上托管(内存管理、代码执行、垃圾收集[GC]等),其与元数据等信息组成托管模块,再组成程序集。MSIL运行时被JIT编译器(Just in Time-Compiler)编译成机器语言,其特点在于按需编译MSIL,且编译过的代码会被缓存。

那么其设计优点在哪呢?

一、跨平台。类似于Java中JVM编译的的字节码(Bytecode),MSIL对于任何计算机系统都不变,由JIT根据系统做调整来编译输出机器语言。另外,被编译过的代码会被缓存,下次执行时直接越过JIT。这样就不同于Java这种解释性语言,而是类似于C++,性能更好。

二、多语言协同。.NET提供了多种语言的编译器来编译出MSIL和元数据,元数据中包含着其语言的详细信息,使得多语言协同成为可能。

三、托管与非托管。类似Java的JVM,C#有CLR托管代码,提供JIT按需编译、内存管理、代码安全验证、代码执行、垃圾收集、反射、类加载器等服务,分离了应用和底层操作系统。另外,C#也可以有非托管代码(在CLR外部,由操作系统执行的代码),使用指针(需要使用unsafe关键字),和dll进行数据传送。再者,有部分资源属于非托管资源(包装了操作系统资源的对象),例如文件,网络连接。CLR不会回收这些资源,需要编写代码释放(自己编写Dispose主动调用,或者写进析构函数[Finalize]让GC调用)。

 

参考

《C# Primer Plus 中文版》

https://blog.csdn.net/sinat_33087001/article/details/80185199

https://blog.csdn.net/lidandan2016/article/details/77868043

http://www.cnblogs.com/rush/p/3155665.html

https://blog.csdn.net/hongyanjava/article/details/78354228

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值