托管与非托管代码的区别

原创 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


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

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

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

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

托管代码和非托管代码

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

托管与非托管代码的区别

随着Visual Studio .NET 2003在四月24号的发布,许多开发者开始考虑使用一项被成为托管代码的新技术。但是对于C++开发者来说,可以会遇到一些麻烦。因为C++是比较特殊的。 什么是...
  • zi_wu_xian
  • zi_wu_xian
  • 2013年04月24日 09:58
  • 845

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

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

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

C#托管代码与C++非托管代码互相调用 http://www.cnblogs.com/Jianchidaodi/archive/2009/03/11/1407270.html#1473515 ...
  • cbbbc
  • cbbbc
  • 2015年12月08日 19:44
  • 1350

托管DLL和非托管DLL的区别

首先解释一下,托管DLL和非托管DLL的区别。狭义解释讲,托管DLL就在Dotnet环境生成的DLL文件。非托管DLL不是在Dotnet环境生成的DLL文件。      托管DLL文件,可以在D...
  • huang9012
  • huang9012
  • 2013年07月25日 00:44
  • 10617

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

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

C#笔记26: 与非托管代码交互操作

C#笔记26: 与非托管代码交互操作 本文摘要: 1:非托管代码交互操作的概念 2:类型库 3:激活 COM 对象 4:向 COM 公开 .NET Framework 组...
  • huang9012
  • huang9012
  • 2013年09月23日 10:28
  • 581

与非托管代码的互操作性

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

托管代码与非托管代码

  • 2014年06月01日 16:57
  • 18KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:托管与非托管代码的区别
举报原因:
原因补充:

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