托管与非托管代码的区别

原创 2016年08月30日 00:04:24

首先我们来说一下托管与非托管的主要区别:
1,编译运行过程不同。
2,跨平台性不同。
3,运行性能不同。

于是C/C++与C#的流程区别:
C/C++:
过程:源代码->解析头文件和宏->编译成汇编代码(编译器编译)->生成机器指令(汇编解析)->机器指令->连接成应用程序。
优点:最终直接生成了机器码,可以直接被计算机识别和运行,无需任何中间运行环境。
缺点:由于不同平台能够识别的机器码不同,因此程序的跨平台能力较差。
C#:
过程:源代码->字节码(第一次编译)->编译为机器码(运行时通过托管虚拟机解析为机器码,这个过程是动态的,刚启动时只加载一部分代码,然后再不断加载运行到但还没加载的代码)。
优点:跨平台性比较好,一次编译,可以在不同的设备上运行。
缺点:因运行时编译,有一定的性能问题。

然后就是托管资源与非托管资源。
C/C++中的内存需要自己申请自己释放,如malloc/new , free/delete
C#和JAVA中,分配的资源一般会自动由平台的垃圾回收器(GC)释放,这样的资源就是托管资源,但也有一些其他的资源需要手动释放,如System.IO.StreamReader,显式调用Close()或Dispose()释放。

C#的三大难点之二:托管与非托管
http://blog.sina.com.cn/s/blog_3e51bb390102vv6b.html


声明:
该文仅作学习与记录之用,欢迎技术纠错和讨论;
非技术性言论皆为一家之谈,如有不同意见请坚持己见;
如有雷同可能为学习汝之所得,请各位巨人的肩膀还请继续空出位置。

版权声明:转载请注明出处。

相关文章推荐

托管代码和非托管代码

托管代码是一microsoft的中间语言,他主要的作用是在.NET FRAMEWORK的CLR执行代码前去编译源代码,也就是说托管代码充当着翻译的作用。 源代码在运行时分为两个阶段:   ...

托管代码和非托管代码

托管代码 托管代码就是Visual Basic .NET和C#编译器编译出来的代码。编译器把代码编译成中间语言(IL),而不是能直接在你的电脑上运行的机器码。中间语言被封装在一个叫程序集(a...

.Net 托管代码和非托管代码的区别

什么是托管代码(managed code)?       托管代码是一microsoft的中间语言(IL),他主要的作用是在.NET   FRAMEWORK的公共语言运行库(CLR)执行代码前去...
  • avon520
  • avon520
  • 2014年06月11日 16:47
  • 1151

C#托管代码与C++非托管代码互相调用

转自:http://blog.csdn.net/llddyy123wq/article/details/5620441 C#托管代码与C++非托管代码互相调用 http://www.c...

托管代码与非托管代码之间与托管程序

自.Net问世以后,我们习惯的VC++,VB编程模式有了很大的变换,托管与非托管的概念也不断映入程序员们的眼帘,可以说.NET正逐步成为编程的主流语言和平台之一。今天不与大家讨论谁主沉浮,也不发表慷慨...

关于C#托管代码与非托管代码的理解

C#托管代码是什么? 托管代码(Managed Code)实际上就是中间语言(IL)代码。代码编写完毕后进行编译,此时编译器把代码编译成中间语言(IL),而不是能直接在你的电脑上运行的机器码。程序...

C#与非托管代码交互操作

  • 2008年09月09日 11:23
  • 22.3MB
  • 下载

与非托管代码的互操作性

本文来自于《CLR via C#》中文版第四版1.9,作者Jeffrey Richter 译者:周靖。 LZ记录下来完全是为了以后的方便查文档。 Note: 1. TlbImp是Ty...

托管代码与非托管代码

  • 2014年06月01日 16:57
  • 18KB
  • 下载

.net 托管代码与非托管代码

关键是要了解CLR(公共语言运行时)   .Net Framework 是由彼此独立又相关的两部分组成:CLR 和 类库, CLR是它为我们提供的服务,类库是它实现的功能。 .NET的大部分特性——...
  • F7ANTY
  • F7ANTY
  • 2012年03月22日 09:30
  • 402
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:托管与非托管代码的区别
举报原因:
原因补充:

(最多只允许输入30个字)