CLR

CLR

简而言之,托管代码就是执行过程交由运行时管理的代码。 在这种情况下,相关的运行时称为公共语言运行时 (CLR),不管使用的是哪种实现(Mono、.NET Framework 或.NET Core)。 CLR 负责提取托管代码、将其编译成机器代码,然后执行它。

如果运行 C/C++ 程序,则运行的代码也称为“非托管代码”。


托管代码是使用可在 .NET 上运行的一种高级语言(例如 C#、Visual Basic、F# 等)编写的。 使用相应的编译器编译以这些语言编写的代码时,无法获得机器代码, 而是获得中间语言代码,然后运行时会对其进行编译并将其执行。 C++ 是这条规则的一个例外,因为它也能够生成可在 Windows 上运行的本机非托管二进制代码。



什么是“中间语言”(简称 IL)? 中间语言是编译使用高级 .NET 语言编写的代码后获得的结果。 对使用其中一种语言编写的代码进行编译后,即可获得 IL 所生成的二进制代码。 必须注意,IL 独立于在运行时顶层运行的任何特定语言
从高级代码生成 IL 后,你很有可能想要运行它。 CLR 此时将接管工作,启动实时 (JIT) 编译过程,或者将代码从 IL 实时编译成可以真正在 CPU 上运行的机器代码。 这样,CLR 就能确切地知道代码的作用,并可以有效地_管理_代码。


================================================

CTS为Common Type System(通用类型系统),其是微软制定的一个正式的规范来描述类型的定义和行为,使得一种编程语言写的代码能和另一种编程语言进行沟通。

CTS规定,一个类型可以包括0个或者多个成员。

        字段(Field)
        方法(Method)
        属性(Property)
        事件(Event)

同时,CTS指定类型可见性规则和类型成员的访问规则:

        private
        family(C#中是protected)
        family and assembly(C#中没有修饰符)
        assembly(C#中是internal)
        family or assembly(C#中是protected internal)
        public
=================================================

CLS为Common Language Specification(公共语言规范),其定义了一个最小功能集,任何编译器只有支持此功能集,才可以兼容其他符合CLS、面向CLR的语言生成的组件。

====================================

非托管堆

回收器不知道如何释放非托管资源,如文件句柄,网络连接、数据库连接等。当非托管对象被托管对象引用时,托管对象被释放时应确保其相关的非托管对象被释放。

A 在定义类时,声明一个析构函数
B IDisposable接口


==================================================

C#编译成IL语言,然后CLR接管工作,进行JIT操作,把IL变机器语言,CLR此时可以管理代码
CLR 相当于虚拟机


C#是托管代码
C++是非托管代码


CLS公共语言规范 最小功能集
CTS通用类型系统 语言交流


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值