.Net 中的托管与非托管 (CLR)

  CLR(公共语言运行时 )   
      .Net Framework是由彼此独立又相关的两部分组成:CLR和类库,   CLR是它为我们提供的服务,类库是它实现的功能. .NET的大部分特性----垃圾收集,版本控制,线程管理等(这些程序员是无法干预的),都使用了CLR提供的服务
   
      当你为.NET Framework编译源代码的时候,得到的目标代码不是CPU能识别的机器指令,而是一种叫做"微软中间语言(MSIL,或简称为IL的代码)"的新语言.CLR提供了一个实时编译器,用来把IL代码编译为本机机器代码.这样一来,CLR能够使代码变得可移植,因为.NET应用程序的源代码必须被编译为IL代码,这些IL代码可以运行在任何提供CLR服务的平台上.从CLR的角度来看,所有的语言都是平等的,只要有一个能生成IL代码的编译器就行,这就确保了各种语言的互操作性
.   
      为CLR而编写以及使用CLR服务的代码叫"托管代码",而那些未使用CLR服务的代码(也就是你多年以来一直编写的代码)叫"非托管代码
".   

      讨论到C++在.NET托管环境中的应用,由于C++不是为.NET平台设计的语言,所以,微软需要对C++作一些扩充,这就引入了"托管扩展"这一概念,它允许我们在C++项目中使用.NET   Framework,如果有下列开发需要,就必须使用托管扩展
:  

1.   将现有的C++代码移植到托管环境中   
2.   在C++代码中访问.NET Framework类   
3.   通过.NET语言访问现有的C++代码  

在.Net中, 非托管代码就是本地代码的意思,就是说在执行时是直接送往CPU的, COM/COM++组件,ActiveX控件,API函数,指针运算,自制的资源文件等是非托管的,其它就是托管的.

最常见的一类非托管资源就是包装操作系统资源的对象,例如文件,窗口或网络连接等。 .Net Framework提供了Finalize()方法,它允许在垃圾回收器回收该类资源时,适当的清理非托管资源。如果在MSDN Library 中搜索Finalize将会发现很多类似的主题,这里列举几种常见的非托管资源:ApplicationContext,Brush,Component,ComponentDesigner,Container,Context,Cursor,FileStream,Font,Icon,Image,Matrix,Object,OdbcDataReader,OleDBDataReader ,Pen,Regex,Socket,StreamWriter,Timer,Tooltip 等等资源。
  int,string,float,DateTime等等就是托管资源。Net中超过80%的资源都是托管资源。

参考链接:http://www.2cto.com/kf/201202/121211.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值