C++实现内存“垃圾”回收机制

题目描述:当前我国计算机专业的数据结构与算法一般采用 C + + C++ C++语言实现数据结构及相关算法(也有个别学校采用C语言实现数据结构及相关算法),但是 C + + C++ C++ C C C语言由于采用指针的原因,程序员能灵活操作内存空间,也可能由于 n e w / d e l e t e new/delete new/delete运算符( C C C语言一般采用 m a l l o c ( ) / f r e e ( ) malloc()/free() malloc()/free()函数)使用不当导致内存泄漏,你是否可以在保留指针的情况下,设计一种“ 类 C + + 类C++ C++”(比如称为“ C + + + C+++ C+++”语言),但要求具有内存“垃圾”回收机制以避免出现内存泄漏,如果可以请具体说明你的“ 类 C + + 类C++ C++语言“采用哪些方法实现内存”垃圾“回收机制。

思路一:设计的“ C + + + C+++ C+++”语言的而垃圾回收可以如下图所示。图中的垃圾收集器将存储器视为一张有向可达图,能够正确地标记可达的内存节点,但一些不可达的内存节点却有可能被错误地标记为可达。从而,被错误标记地节点,将永远不会回收。可想而知,当系统中的内存被错误标记所占满时,系统将无法再运行。
垃圾收集器作为一个应用并行的独立线程,不断地更新有向图和回收垃圾。无论应用程序何时需要内存空间,系统都可以使用 n e w new new关键字,如果使用 n e w new new关键字找不到可用的内存分配块,那么它就调用垃圾收集器,垃圾收集器识别出垃圾块,并通过使用 d e l e t e delete delete关键字将他们返回给堆块。这里的关键在于,垃圾收集器代替了应用程序去释放内存,当对垃圾收集的调用返回时, n e w new new关键字想要发现一个可用的空闲块。如果还是不成功,它就向操作系统请求额外的存储器。最后,如果成功, n e w new new关键字返回一个指向请求块的指针,如果不成功就返回一个空指针。
在这里插入图片描述

思路二:
垃圾回收技术所解决的只有 2 2 2个重要问题:第一,如何识别当前内存中未被引用的内存;第二,如何将失去管理的内存进行回收,下面将介绍两种方法。
1 1 1.引用计数法:引用计数的原理非常简单:对于一个内存块,除内存块外本身增加一个引用计数,每当这个内存块被外部的指针或内存块所引用的时候,引用计数加 1 1 1;当引用它的指针释放了对它的引用的时候,则引用技术减 1 1 1,同时检查引用计数的值,当引用计数为 0 0 0时,就销毁该内存块并释放其所占用的内存。它的优点就是垃圾回收过程无需打断进程运行,简单快捷,对资源管理很有效。
2 2 2.标记清除法:该算法分成 2 2 2个阶段:标记阶段和清除阶段。在标记阶段,垃圾回收器扫描每个内存块,对被引用的内存块进行标记。在标记完成后,统一检测内存集中所有内存,将未被标记的内存块进行回收。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值