CLR简介

CLR简介


什么是CLR

CLR英文全称Common Language Runtime,即公共语言运行时。

乍一看到这个概念确实不明白,什么是语言运行时?

简单来说,就是一个程序运行所需要的环境,包括各种资源、各种操作等等。

通常来说,不同语言、不同操作系统所需要的运行时环境都不一样。举个例子,Windows上的可执行程序都被包装成了.exe格式,而这种.exe格式文件提供了一个程序从加载到运行所需要的所有资源和环境。

而CLR提供了:

1、一个支持GC的虚拟机,该虚拟机有自己的一套指令集,即CIL(公共中间语言,COmmon Intermediate Language)。高级语言最终会转化成CIL,

2、一种丰富的元数据表示,用来描述数据类型、字段、方法等。通过这些统一的描述方法来生成对应的程序。

3、一种文件格式,一种专属的不于操作系统和硬件绑定的格式,即跨平台。

4、一套类库,提供了垃圾回收、异常、泛型等基本功能,提供了字符串、数组、列表、字典等数据结构,提供了文件、网络、交互等操作系统功能。

5、一系列规则,定制了在运行时如果查找引用其他文件、生命周期等一系列规则。


关系

下面这张图就非常好的表示了高级语言、CIL和CLR之间的关系:

img


CLR的优势

CLR最大的优势就在于跨语言跨平台支持。目前微软已经为多种语言开发旅了基于CLR的编译器,包括C++、C#、Visual Basic、F#、Iron Python、 Iron Ruby和IL。还有一些大学、公司和机构为一些语言也开发了基于CLR的编译器,包括da、APL、Caml、COBOL、Eiffel、Forth、Fortran、Haskell、Lexicon、LISP、LOGO、Lua、Mercury、ML、Mondrian、Oberon、Pascal、Perl、PHP、Prolog、RPG、Scheme、Smaltak、Tcl/Tk等。

CLR为不同的编程语言提供了统一的运行平台,对于开发者来说,他们无需考虑平台运行问题,无论使用什么语言开发,最终都会编译成IL,供CLR运行。对于CLR来说,它并不知道也无需知道IL是从什么语言编译过来的。

CLR的主要目标就是为了让编程更简单,让开发者专注于直接需求。正是因为这样的优势,CLR极大地简化了交互的复杂性。


什么是CLS

但是这么多种各式各样的语言最终都要编译成IL,肯定需要一种规范,否则那不得起飞。

CLS就是用来规范语言的。CLS全称Common Language Specification,即公共语言规范。也就是说所有被CLR支持的高级语言都需要最少支持CLS所规定的功能集。只要高级语言最少支持了CLS之后,其它想这么花里胡哨就这么花里胡哨。


垃圾回收和托管代码

CLR提供垃圾回收功能,具体垃圾回收算法自行查阅相关文章。

所谓托管代码,即可以通过CLR的GC来释放所有资源的代码,开发者无需过度关注资源的释放。其实可以从字面上理解,托管代码委托给CLR进行管理,开发者不管。而至于非托管代码,比如操作系统代码、C#中的Socket、Stream等,这些代码无法通过CLR的CG完全释放占用的资源。一般来说,非托管的功能都被包装过了,比如当我们访问文件的时候,肯定不会直接使用操作系统的CreateFile函数,而是使用System.IO.File类。让用户直接使用的非托管功能确实非常少见。


内存安全和类型安全

由于CLR提供了垃圾收集,随之带来的一个特性就是内存安全。所谓内存安全,即程序只访问已申请的内存。这也就意味着,不会存在任何野指针。

GC是保证内存安全的必要条件,但不够充分。因为虽然GC保证了内存的及时释放和回收(及时检查内存释放有效,防止访问无效内存),但是无法禁止程序越界访问数组或是一些对象成员。

那么如何解决这个问题,保证内存安全呢?接下来就要说到类型安全。

所谓类型安全,即每一块申请的内存都与一种类型相关联,需要保证被标记了类型的这些内存,只能进行这些类型允许的操作。


高级语言支持

CLR还支持非常多的高级语言特性和功能,比如面对对象、装箱拆箱、泛型、反射、异常、多线程等。


小结

VM和LR其实比较类似,有人说LR的创建就是为了对标VM。不管是不是,总之至少目前知道了CLR是个什么东西。如果想深入了解CLR推荐书籍《CLR via C#》。


参考

https://docs.microsoft.com/en-us/dotnet/standard/clr?redirectedfrom=MSDN

https://zhuanlan.zhihu.com/p/68158037

https://zhuanlan.zhihu.com/p/20794115

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/350985.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

CRF概述

主要参考 1.李航统计学习方法 2.一个声音好听的小姐姐的讲解视频https://www.bilibili.com/video/av752902225/ 3. 白板推导系列视频 https://www.bilibili.com/video/BV19t411R7QU?p1 一、背景介绍 1、背景算法介绍 HMM,隐马尔可夫模型,是生成模…

CRC-16

文章目录 A.1 CRC16 算法A.1.1 CRC16 算法参数设置A.1.2 LengthA.1.3 CounterA.1.4 Data IDA.1.5 CRCA.1.6 CRC16 算法示例A.1.7 CRC16 算法推荐(查表法)A.1.8 CRC16 实例(查表法) A.1 CRC16 算法 A.1.1 CRC16 算法参数设置 CRC16 算法中要求了 Counter、Data ID、CRC 等参数…

CRF

随机场:由若干个子集组成的一个整体,而每个子集都按照某个分布随机赋予一个值,这个场就叫随机场。 马尔科夫随机场:随机场中某一位置的赋值仅与其相邻位置的赋值有关,和与其不相邻位置的赋值无关。 CRF是马尔科夫随机…

crc(crc是什么职业)

CRC的特点是什么? 在诸多检错手段中,CRC是最著名的一种,其特点是:检错能力极强,开销小,易于用编码器及检测电路实现 CRC的特点有哪些呢? CRC的全称是循环冗余校验,其特点是:检错能力极强&#x…

CRC16

CRC选择 当数据帧长度在8bits-128bits范围内时,推荐CRC-8(CRC-8能够减少额外比特的开销,且有更好的性能表现) 当数据帧长度在128bits-2048bits范围内时,推荐CRC-12,CRC-16,CRC-CCITT(CRC-12额外比特的开销更小&#x…

linux中ls -l出的crw brw lrw代表什么?

原文链接:https://www.cnblogs.com/victorywr/p/15725170.html 每次使用ls -al 查看文件信息,都只看rw-rw-rw- (权限为666),忽略最前面的c/b/l,今天了解一下: linux中c表示字符设备文件&#xf…

一款红队批量脆弱点搜集工具

功能 指纹识别:调用“三米前有香蕉皮“前辈工具,他的工具比finger好用 寻找资产中404,403,以及网页中存在的其他薄弱点,以及需要特定路径访问的资产 后续会把nuclei加进来 目前只有windows可以用 使用 第一次使用脚本请运行p…

【机器学习】正则化详解和过拟合的解决

https://blog.csdn.net/weixin_45434953/article/details/130970273 上一篇文章的例子中,如果使用一个四次多项式去拟合房价函数,会导致过拟合问题 而正则化是解决过拟合的一个方法。右图过拟合是因为其三次方项和四次方项的影响,我们再回顾…

改进YOLOv8 | 主干网络篇 | YOLOv8 更换骨干网络之 GhostNet | 从廉价操作中获取更多特征

论文地址:https://arxiv.org/abs/1911.11907 代码地址:https://github.com/huawei-noah/ghostnet 由于内存和计算资源有限,在嵌入式设备上部署卷积神经网络(CNN)很困难。特征图中的冗余是那些成功的神经网络的重要特征,但在神经架构设计中很少研究。本文提出了一种新的G…

【测试入门】测试用例经典设计方法 —— 因果图法

01、因果图设计测试用例的步骤 1、分析需求 阅读需求文档,如果User Case很复杂,尽量将它分解成若干个简单的部分。这样做的好处是,不必在一次处理过程中考虑所有的原因。没有固定的流程说明究竟分解到何种程度才算简单,需要测试…

妙啊!真实模拟面试 — 面试官究竟会怎么问 数据库索引呢?

什么是索引? 面试官:我看你项目中有做过 SQL 优化,那我们今天就来聊聊索引吧。 (索引能问些啥,无非是索引的概念、索引的使用规则、索引的分类、索引的原理。嘻嘻~我早有准备) 我:数据库中的…

一道面试题:餐馆模拟

前阵子遇到一个面试题,当时没有做出来,后来断断续续的用了一周的时间做了出来,但感觉也不完全对,先来看看题目,稍后再讨论。 问题 模拟一个餐馆,三个厨师,二个服务员,厨师单独做菜…

AI模拟面试官项目实战 | 项目概述

🎯摘要 看完本文,你可能有如下收获: 了解该项目的预览效果、了解技术栈、系统设计以及教程食用指南 ⭐️⭐️该收获仅供参考,真实收获以实物为准😇😇 ☀️系统概述 【AI模拟面试官】是一个模拟线上面试的…

软件测试面试题【2021模拟面试整理版(含答案)】

点击上方蓝色“程序员一凡”,选择“设为星标” 主页点击“领取资料”获取整理好的学习资源 一、问题预测 \1. 让简单介绍下自己(每次面试开场) \2. 让说下自己会的内容 \3. 看了哪些书籍(有问到) \4. 了解过哪些技…

Java程序员模拟面试,解析面试困扰和建议

模拟面试,相信大多数程序员都没有经历过,甚至还有从来没听说针对面试的辅导或者模拟面试啥的,所有的面试经验都来源于网上写的一些文章,然后再在面试的时候通过各种碰壁去揣测面试官在想啥。 前言 前几天组织了一次模拟面试直播&…

模拟面试题一

一、选择题 1、python不支持的数据类型有 A、charB、intC、floatD、list 1 参考答案:A 参考答案 2、打印输出结果:x "foo"y 2print(x y)A.foo B.foofoo C.foo2 D.2 E.An exception is thrown 1 D :一个是字符串&#…

前端面试题总结:模拟面试

1,问:请先自我介绍? 答:略 二,技术知识题 1,问:看你简历有项目经历,那在你之前的项目中,用到的技术栈有哪些? 答:主要使用过vue和微信小程序&…

模拟面试题回顾

模拟面试题回顾 1.servlet里面有哪些关键的方法? 讲到它的方法,就不可避免地去了解servlet的运行过程(也可以说是生命周期),如下图所示: 它的四个过程: ​ (1).当客户端第一次发送请求后,由容器&#xf…

java-模拟面试

讲一下快速排序算法 通过一次排序将数列分为两部分,一部分比另一部分数字都小 时间复杂度O(nlogn) 空间复杂度O(1) 先确定一个中间比较值,确定一个左指针(从头开始),右指针(从尾部开始) while循…

如何模拟面试?

我是艾木: 1.从学生到职场 当初毕业找工资的场景,至今还记忆犹新。 当时的自己还是学生的身份,正处于找工作的浪潮中,当时的校园招聘如火如荼,工作岗位也琳琅满目。一时间仿佛置身于百货商场之中,每个人都在…