内存处理的另一个方面是垃圾回收。在支持垃圾回收的环境中,程序员几乎不用显式地释放与对象关联的内存。运行时库会在某时刻自动清理没有任何引用的对象。
与C#和Java不一样,在C++语言中没有内建垃圾回收。在现代C++中,使用智能指针关联内存,在旧代码中,则在对象层次通过new和delete管理内存。在C++中可以实现垃圾回收,但将自己从释放内存的任务中解放出来可能又会引入新的麻烦。
标记和清扫是一种垃圾回收的方法。使用这种方法的垃圾回收器定期检查程序中的每个指针,并将标记引用的内存标记为仍在使用。在每一轮周期结束时,未标记视为没有在使用,因而被释放。
如果愿意执行以下操作,那么可以在C++中实现标记和清扫算法:
(1)在垃圾回收器中注册所有指针,这样垃圾回收器可以轻松遍历所以指针。
(2)让所有对象都从一个混入类中派生,这个混入类可能是GarbageCoolectible,允许垃圾回收器将对象标记为正在使用中。
(3)确保在垃圾回收器运行时不能修改指针,从而保护对象的并发访问。
可以看出,这个垃圾回收方法需要程序员付出很多努力,甚至可能比使用delete更容易出错。人们已经尝试在C++中实现安全简单的垃圾回收机制,但是就算C++中出现了完美的垃圾回收机制,它也不一定适用于所有应用程序。垃圾回收存在以下缺点:
当垃圾回收器正在运行时,程序可能停止响应。
使用垃圾回收器时,析构函数具有不确定性。由于对象在被垃圾回收之前不会销毁,所以对象离开作用域时不会立即执行析构函数。这意味着,由析构函数完成的清理资源操作关闭文件,释放锁等要在将来某个不确定的时刻进行。
★关于WorkWin公司电脑监控软件★
WorkWin的使命是打造Work用途的Windows 电脑系统,有效规范员工上网行为,让老板知道员工每天在做什么(监控包括屏幕、上网在内的一举一动),限制员工不能做什么(禁止网购、游戏、优盘等)。
WorkWin基于纯软件设计,非常容易使用,无需添加或改动任何硬件,使用一台管理机监控全部员工机电脑。历经南京网亚十余年精心打造,此时此刻每天都有成千上万企业电脑正在运行WorkWin,选择WorkWin选择“赢”。
版权所有,南京网亚计算机有限公司 。本文链接地址: 内存程序处理垃圾回收