.NET 中的 CLR 是什么?
.NET 中的 CLR 是什么?
公共语言运行时 (CLR) 是 管理以多种受支持语言中的任何一种编写的程序的执行的编程, 允许他们共享用任何语言编写的通用面向对象类 .它是 Microsoft .NET Framework 的一部分。
下图说明了 CLR 如何与操作系统/硬件以及类库相关联。这里, 运行时 实际上是CLR。
CLR 为 MSIL 代码提供服务和运行时环境。 CLR 内部包含 JIT(即时)编译器,它将 MSIL 代码转换为由 CPU 进一步执行的机器代码。 CLR 还使用 .NET Framework 类库。元数据向 CLR 处理 MSIL 代码的 CLR 提供有关编程语言、环境、版本和类库的信息。由于 CLR 很常见,因此它允许用不同语言编写的类的实例调用用另一种语言编写的类的方法。
CLR的主要组件:
通用语言规范 (CLS):
它负责将不同的 .NET 编程语言语法规则和规定转换为 CLR 可理解的格式。基本上,它提供了语言互操作性。语言互操作性意味着在 .NET 框架中也为其他编程语言提供执行支持。
语言互操作性可以通过两种方式实现:
- 托管代码: 由 CLR 管理的 MSIL 代码称为托管代码。对于托管代码 CLR 提供 三 .NET 设施:
- 非托管代码: 在 .NET 开发之前,.COM 组件和 Win32 API 等编程语言不会生成 MSIL 代码。所以这些不是由 CLR 管理,而是由操作系统管理。
通用类型系统 (CTS):
每种编程语言都有自己的数据类型系统,因此 CTS 负责理解 .NET 编程语言的所有数据类型系统,并将它们转换为 CLR 可理解的格式,这将是一种通用格式。
每种 .NET 编程语言都有两种类型的 CTS:
- 值类型: 值类型将值直接存储到内存位置。这些类型仅适用于堆栈机制。 CLR 在编译时允许这些内存。
- 参考类型: 引用类型将包含值的内存地址,因为引用类型不会将变量值直接存储在内存中。这些类型与堆机制一起使用。 CLR 在运行时为这些分配内存。
垃圾收集器:
它用于提供 自动内存管理 特征。如果没有垃圾收集器,程序员将不得不编写内存管理代码,这对程序员来说是一种开销。
JIT(即时编译器):
它负责使用公共语言运行时环境将 CIL(公共中间语言)转换为机器代码或本机代码。
CLR 的好处:
- 它通过在运行时提供程序之间的丰富交互来提高性能。
- 通过消除在任何支持它的操作系统上重新编译程序的需要来增强可移植性。
- 当它分析 MSIL 指令是否安全时,安全性也会提高。此外,使用委托代替函数指针增强了类型的安全性。
- 借助垃圾收集器支持自动内存管理。
- 提供跨语言集成,因为 CLR 内部的 CTS 提供了一个通用标准,可以激活不同的语言来扩展和共享彼此的库。
- 支持使用以其他 .NET 编程语言开发的组件。
- 提供语言、平台和架构独立性。
- 它允许轻松创建可扩展的多线程应用程序,因为开发人员无需考虑内存管理和安全问题。
资料来源:
- https://www.techtarget.com/whatis/definition/Common-Language-Runtime-CLR
- https://www.geeksforgeeks.org/common-language-runtime-clr-in-c-sharp/
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通