什么是.NET托管代码?与非托管代码的区别

首先你要明白什么是.NET Framework?

简单点来说是一个框架、而C#应用程序或ASP.NET应用程序都是运行在这个框架之上的,个人理解为相当于java的jdk,其中.NET Framework下包括两个主要的组件:公共语言运行库和.NET Framework类库。而公共语言运行库运行库是.NET Framework的基础,可以把它看作一个在执行时管理代码的代理。既然是代理,可能会提供一些服务,其中核心的服务有内存管理、线程管理和远程处理等等,这个时候以运行库为目标的代码成为托管代码,反之则为非托管代码。

 

托管代码与本地代码有哪些区别?

托管代码是指使用.NET Compact Framework开发的程序代码,可执行文件被编译成IL,执行时需要有.NET的运行时环境。而本地代码指用C++等语言开发的程序代码,可执行文件被编译成与CPU指令集有关的机器码,可以直接运行。

 

一、什么是.NET托管代码?

简而言之,托管代码就是执行过程交由运行时管理的代码。 在这种情况下,相关的运行时称为公共语言运行时 (CLR),不管使用的是哪种实现?(Mono、.NET Framework 或.NET Core)。 CLR 负责提取托管代码、将其编译成机器代码,然后执行它。 除此之外,运行时还提供多个重要服务,例如自动内存管理、安全边界、类型安全,等等。

 

相反,如果运行 C/C++ 程序,则运行的代码也称为“非托管代码”。 在非托管环境中,程序员需要亲自负责处理相当多的事情。 实际的程序在本质上是操作系统 (OS) 载入内存,然后启动的二进制代码。 其他任何工作 - 从内存管理到安全考虑因素 - 对于程序员来说是一个不小的负担。

 

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

 

结论:

C#,VB,F#等就是托管代码,类似于C,C++这种偏底层的语言编写的代码就是非托管代码。

 

简而言之:

托管代码(高级语言) => IL(中间语言) => 二进制代码

非托管代码(C & C++) => 二进制代码

 

二、.NET托管代码与非托管代码的区别

.net托管代码是运行在.NET FRAMEWORK上的,类似于JAVA虚拟机。

托管代码:属安全代码,因为不涉及指针,但相对性能上较低,C#写出来的东西就可以认为是托管代码
非托管代码:非安全的,可以使用指针,性能较高,C++那是写出来的东西就可以认为是非托管代码,还有比如MFC等等。

 

一般地,项目开发用托管代码即可。

 

简单来说:

托管代码就是把有关内存管理的操作全都由CLR来管理,也就是把底层的一些操作全都封装起来了(安全性上就相对高点,因为不能直接进行内存读取,不会出现内存溢出之类的问题,但相对的,性能会有损失,使用起来也会不够灵活);

非托管代码,可以直接进行硬件操作,性能比较好;

比较直观的例子就是:C#使用垃圾回收,而C++需要手动释放

 

 

CLI的定义:Common Language Infrastructure公共语言基础结构

C#生成的不是处理器能直接解释的指令,而是一种中间语言指令,即CIL:Common Intermediate Language,第二个编译步骤通常在执行时发生,在这个过程中,CIL被转换成处理器能理解的机内码,但要想执行,仅仅转换为机内码还是不行的,C#程序还需要在一个代理的上下文中执行,负责管理C#程序执行的这个代理就是虚拟执行系统Virtual Execution System,VES,又称为“运行时”,运行时负责加载和运行程序,并在程序执行时提供额外的服务(比如安全、垃圾回收等)。

也就是说“运行时”:runtime它不是指一个时间,而是特指“虚拟执行系统”这个代理,负责管理C#程序的执行

    A+
发布日期:2019年12月17日 20:17:54  所属分类:渗透测试
最后更新时间:2019-12-17 20:17:54
付杰
  • ¥ 129.0元
  • 市场价:199.0元
  • ¥ 299.0元
  • 市场价:599.0元
  • ¥ 99.9元
  • 市场价:299元
  • ¥ 79.0元
  • 市场价:129.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: