`
yangyou230
  • 浏览: 1651725 次
文章分类
社区版块
存档分类

托管(C++)

 
阅读更多

所谓托管是指内存管理由系统而不是由程序员管理。像C#语言的内存管理(内存的分配和释放)都是由系统管理的。所以只有new而没有delete。托管C++是微软所创造一种扩展C++的一种叫法。英文写出来是Managed C++,就更能看出宣传有系统管理内存这个意思。

C++有个很重要的特点就是内存由程序员管理。所以分配内存以后,要程序员自己释放。如果没有释放就会有内存泄露,如果在不该释放时释放了,就会出现所谓的野指针。

在C++把内存管理交给系统的,由系统来负责释放,就被称为托管。

多数对所谓的Managed C++不满意。所以后来微软推出了C++/CLI,相对Managed C++对标准的C++做了很多更激进的改造。当然C++/CLI依然有系统(准确的说是.net框架)管理内存功能,所以也有人把C++/CLI依然称为托管C++。

可以简单的把托管C++看成在语言层次上支持.net框架。但严格的说没有非托管C++,因为托管只是一种对C++的扩展。使用标准C++理论上说也可以支持.net框架。就像支持其他系统一样。不使用.net框架,也C++可以利用别的办法由系统来管理内存。

C++/CLI可以说是C++的一个变种。语法的角度看是C++的一个超集。如果程序没有移植要求,而且又需要使用.net框架,到的确是个不错的选择。

托管代码直接编译成目标计算机的机械码,这些代码只能运行在编译出它们的计算机上,或者是其它相同处理器或者几乎一样处理器的计算机上。非托管代码不能享受一些运行库所提供的服务,例如安全和内存管理等。如果非托管代码需要进行内存管理等服务,就必须显式地调用操作系统的接口,通常来说,它们会调用Windows SDK所提供的API来实现。就最近的情况来看,非托管程序会通过COM接口来获取操作系统服务。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics