剑鬼鬼的博客

技术,游戏,电影,徒步,逗B

托管与非托管代码的区别

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


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

阅读更多
版权声明:转载请注明出处。 https://blog.csdn.net/bioman1224/article/details/52358051
文章标签: c#
个人分类: 编程基础
上一篇Unity 性能优化 系列(一)基本概念
下一篇乐观锁与悲观锁(多线程)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭