托管与非托管代码的区别

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


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

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

相关文章推荐

与非托管代码的互操作性

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

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

关键是要了解CLR(公共语言运行时)       .Net Framework 是由彼此独立又相关的两部分组成:CLR 和 类库, CLR是它为我们提供的服务,类库是它实现的功能. .NET的大部分...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

托管代码与非托管代码

托管代码托管代码 (managed code)同受管制的代码,由公共语言运行库环境(而不是直接由操作系统)执行的代码。托管代码应用程序可以获得公共语言运行库服务,例如自动垃圾回收、运行库类型检查和安全...

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

关键是要了解CLR(公共语言运行时)   .Net Framework 是由彼此独立又相关的两部分组成:CLR 和 类库, CLR是它为我们提供的服务,类库是它实现的功能。 .NET的大部分特性——...

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

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

C#如何直接调用非托管代码

C#如何直接调用非托管代码,通常有2种方法:1.  直接调用从DLL导出的函数。2.  调用 COM 对象上的接口方法我主要讨论从dll中导出函数,基本步骤如下:1.使用C#关键字static和ext...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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