本地代码与托管代码

Posted fengdi123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了本地代码与托管代码相关的知识,希望对你有一定的参考价值。

  托管代码:托管代码就是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、数据库连接。








以上是关于本地代码与托管代码的主要内容,如果未能解决你的问题,请参考以下文章

Git的本地结构与远程中心

如何使用Git将本地项目推送至代码托管平台?GiteeGitLabGitHub

C# 托管和非托管混合编程

使用 git 托管代码

是否可以完全用托管的 .NET 语言编写 JIT 编译器(本地代码)

用Visual studio可以开发非托管代码(即本地代码)吗?即不是将源码编译为IL,而是直接编译成为汇编。