栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++面试常问二 —— C++ 垃圾回收机制

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++面试常问二 —— C++ 垃圾回收机制

文章目录
  • 2. C++ 垃圾回收机制

2. C++ 垃圾回收机制

C 语言本身没有垃圾回收机制,而C++ 0x则提供了基于引用计数算法的智能指针进行内存管理,也有一些不作为C++ 标准的垃圾回收库,如著名的Boehm库。借助其他的算法,也可以实现C/C++的GC机制,如标记—清除算法。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fEHgTLMq-1655295339787)(C:UsersSSMAppDataRoamingTyporatypora-user-images1655294125257.png)]

当应用程序使用malloc试图从堆上获取内存块时,通常都是以常规方式调用malloc,而当malloc找不到合适空闲块的时候,它就会去调用垃圾回收器,以回收垃圾到空闲链表。此时,垃圾收集器将识别出垃圾块,并通过free函数将其返回给堆。这样看来,垃圾收集器代替我们调用了free函数,从而让我们显式分配,而无需显式释放。

上图的垃圾收集器,是一个保守的垃圾收集器。保守的定义是:每个可达的块都能够正确的被标为可达,而一些不可达的块却可能被错误的标记为可达。

其根本原因在于C/C++语言不会用任何类型信息来标记存储器的位置,对于一个整形类型来说,语言本身没有一种显式的方法来判断它是一个整数还是一个指针。因此,如果某个整数值所代表的的地址,恰好是某个不可达块中某个字的地址,那么这个不可达块就会被标记为可达。

所以C/C++所实现的垃圾收集器都不是精确的,存在着回收不干净的现象。

而像Python的垃圾收集器则是精确回收。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/980386.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号