Manage Code 托管代码

来源:互联网 发布:学校打铃软件 编辑:程序博客网 时间:2024/05/02 00:43

什么是托管代码
托管代码是在.NET Framework中常见的术语,究竟什么是托管代码呢?
简而言之,托管代码就是运行过程交由运行时(runtime)管理的代码。
而Runtime是Common Language Runtime (CLR、公共语言运行时),目前CLR有三个实现版本(.NET Framework、.NET Core、Mono),其中.NET Core Framework是参考.NET Framework重新开发的.NET实现,Mono是.NET Framework的一个开源的、跨平台的实现,可以参考.NET Core与.NET Framework、Mono的关系了解几个实现的关系。
CLR负责把托管代码的编译为目标平台的机器码并执行。除此之外,CLR提供内存自动管理、安全边界、类型安全等等重要的服务。
相反,如果运行C/C++代码,也就是我们所说的非托管代码,程序员需要负责差不多所有的事情,从内存管理到安全层面的考虑等,对于程序员来说是一个不小的负担。
托管代码可用任意一种.NET平台支持的高级语言编写,例如C#、VB.NET、F#等。托管代码不会直接编译为机器码,而是编译成Intermediate Language中间语言,CLR再编译中间语言为机器码来执行。需要提的一点是,C++是个例外,因为C++也可以直接编译为非托管的的二进制执行包直接在Windows上运行。

中间语言
Intermediate Language(简称IL)中间语言是什么?
IL是专门用于编译使用例如C#、VB.NET这些高层次的编程语言编写的代码的产品。IL独立于上述这些编程语言,并且运行于CLR上层。
IL编译之后并不能立即运行,需要编译为机器代码才能运行,这就需要JIT(Just-In-Time)编译器把IL代码编译为能在CPU上运行的机器代码 。

与非托管代码互操作
CLR允许托管代码越过托管与非托管的边界执行。有许多这样的代码,甚至基础类库中也有这个的代码。这样的特性或者说能力称为互操作性。
有了互操作支持,我们可以执行非托管代码,但是我们必须注意,一旦这样做了,程序的控制权就交由了非托管代码。

0 0
原创粉丝点击