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

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

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

C++实现内存“垃圾”回收机制相关推荐

  1. Java-JVM虚拟机内存垃圾回收机制gc入门:引用类型,对象标记算法,回收算法,常见的 garbage collector

    文章目录 GC的优缺点 引用的四种类型 对象标记算法 引用计数法 可达性分析法 回收算法 标记-清除算法(Mark-Sweep) 复制算法 标记-整理算法(Mark-Compact) 分代收集算法 常 ...

  2. python对字符串和集合的内存垃圾回收机制

    变量声明: name1 = "andy" name2 = name1 这个时候我把name1的值给改成了"tom",问现在name2的值是什么?为什么? 答:a ...

  3. 前端面试查漏补缺--(二) 垃圾回收机制

    前言 本系列最开始是为了自己面试准备的.后来发现整理越来越多,差不多有十二万字符,最后决定还是分享出来给大家. 为了分享整理出来,花费了自己大量的时间,起码是只自己用的三倍时间.如果喜欢的话,欢迎收藏 ...

  4. 详解JVM内存管理与垃圾回收机制2 - 何为垃圾

    随着编程语言的发展,GC的功能不断增强,性能也不断提高,作为语言背后的无名英雄,GC离我们的工作似乎越来越远.作为Java程序员,对这一点也许会有更深的体会,我们不需要了解太多与GC相关的知识,就能很 ...

  5. 谈谈垃圾回收机制方式及内存管理

    回收机制方式 1.定义和用法:垃圾回收机制(GC:Garbage Collection),执行环境负责管理代码执行过程中使用的内存. 2.原理:垃圾收集器会定期(周期性)找出那些不在继续使用的变量,然 ...

  6. js垃圾回收机制和引起内存泄漏的操作

    Js具有自动垃圾回收机制.垃圾收集器会按照固定的时间间隔周期性的执行. JS中最常见的垃圾回收方式是标记清除. 工作原理:是当变量进入环境时,将这个变量标记为"进入环境".当变量离 ...

  7. python 释放变量所指向的内存_通俗易懂的Python垃圾回收机制及内存管理

    Python垃圾回收机制及内存管理 内存管理: 先定义一个变量 name='wxl' 那么python会在内存中开辟一小块区域存放"wxl",此时变量的值是我们真正想要存储的,wx ...

  8. python 内存回收机制_Python垃圾回收机制是什么

    不同于C/C++,像Python这样的语言是不需要程序员写代码来管理内存的,它的GC(Garbage Collection)机制 实现了自动内存管理.GC做的事情就是解放程序员的双手,找出内存中不用的 ...

  9. Chrome V8系列--浅析Chrome V8引擎中的垃圾回收机制和内存泄露优化策略

    V8 实现了准确式 GC,GC 算法采用了分代式垃圾回收机制.因此,V8 将内存(堆)分为新生代和老生代两部分. 一.前言 V8的垃圾回收机制:JavaScript使用垃圾回收机制来自动管理内存.垃圾 ...

最新文章

  1. PHP 中提示undefined index如何解决(多种方法)
  2. C语言程序设计之回调函数实现方法
  3. 即时与及时有什么区别_什么是即时配送它和快递有什么不同,镖滴新势力
  4. js操作节点对象-getElementById
  5. linux 4412跑程序,荣品4412的板子上跑纯linux
  6. HDU4675【GCD of scequence】【组合数学、费马小定理、取模】
  7. 【渝粤教育】国家开放大学2019年春季 690化工原理及实验 参考试题
  8. bzoj2151: 种树
  9. winform 右下角弹出小窗口
  10. Exchange 混合部署—Office 365 注册及预览
  11. IT草根的江湖之路之七: 挑战,刚刚开始
  12. Android开发之SharedPreferences
  13. 《神经网络与深度学习从理论到实践-邱锡鹏》笔记(持续更行ing)
  14. linux ubuntu 安装 XDroid失败
  15. 移动硬盘驱动器读到,但不显示盘符
  16. 爱奇艺大裁员,互联网的苦日子来了…
  17. 物流行业大数据分析:数据驱动物流运营效率提升
  18. idea pycharm 的注册方式
  19. 数据库三范式设计习题
  20. 预祝kimi在上海夺冠!

热门文章

  1. 【python】详解pandas.DataFrame.resample根据时间聚合采样(一)
  2. Android device supports but apk only supports armeabi,x86,x86_64
  3. 【字体在哪个文件夹】Win7怎么安装字体
  4. MATLAB远程桌面不可启动——解决方法
  5. Tar打包 压缩与解压缩到指定目录的方法
  6. OpenCV笔记:模板匹配 cv2.matchTemplate()、cv2.minMaxLoc() 与 绘制矩形 cv2.rectangle() 方法介绍
  7. 《Computer Graphics C Version》(Donald Hearn著)总结 第五章(第一部分)
  8. DCloud 使用chrome调试
  9. hbuilder 断点_Hbuilder配置php断点调试
  10. CAPP集成化工艺设计与管理系统