托管与非托管代码的区别

首先我们来说一下托管与非托管的主要区别:
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


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值