码迷,mamicode.com
首页 > 其他好文 > 详细

本地代码与托管代码

时间:2018-08-24 10:49:18      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:字节   垃圾回收   一个   意思   效率   屏蔽   比较   平台   服务   

  托管代码:托管代码就是Visual Basic .NET和C#编译器编译出来的代码,托管代码在公共语言运行库(CLR)中运行。

  本地代码(有时叫非托管代码):是运行在公共语言运行库环境(CLR)的外部,由操作系统直接执行的代码。非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务。

  经过编译后生成汇编码,直接在cpu上执行。 因为不同的硬件架构和操作系统,会导致不同的cpu支持的指令可能不同,也就是说不通类型的cpu所能执行的代码就是我们说所的本地代码,也叫本机代码或者native代码。这给程序的移植性带来很很大的麻烦,我们在一台机器上运行的好好的代码,如果拿到另一个硬件架构不同的机器上去的话,有可能运行不起来。C,C++写的代码等都是本地代码。但是,本地代码的好处就是效率比较快,因为它少了一个转换的过程。

后来,形成了另一种编程模式,例如:java。 就是采用一种虚拟机的机制, 屏蔽掉底层硬件和操作系统的不同,写的代码经过编译后形成一种中间语言代码,例如java的class字节码。  这种中间码直接在虚拟机里面执行,虚拟机负责将中间码转换成其所在平台上能执行的本地机器码。 在微软的.net 平台下面的编程模型也是这样的,不管是什么语言,写的代码经过相应的编译器编译以后,会生成中间码,然后.net framwork 里面的虚拟机读入这种中间码,产生本地机器上的本地码。 微软把这种产生中间码的语言所写的代码称为托管代码,意思就是说,这种代码是受.net framework 管理的,不能直接访问内存等硬件, 需要通过.net framework 来访问。

   

  区别:
     1、托管代码是一种中间语言,运行在CLR上;
          非托管代码被编译为机器码,运行在机器上。
     2、托管代码独立于平台和语言,能更好的实现不同语言平台之间的兼容;
          非托管代码依赖于平台和语言。
     3、托管代码可享受CLR提供的服务(如安全检测、垃圾回收等),不需要自己完成这些操作;
          非托管代码需要自己提供安全检测、垃圾回收等操作。
  4、.Net有很多非托管的资源,比如StreamWriter、 Timer、数据库连接。

本地代码与托管代码

标签:字节   垃圾回收   一个   意思   效率   屏蔽   比较   平台   服务   

原文地址:https://www.cnblogs.com/fengdi123/p/9527760.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!