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

文章目录

  • 2. C++ 垃圾回收机制

2. C++ 垃圾回收机制

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

C++面试常问二 —— C++ 垃圾回收机制_第1张图片

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

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

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

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

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

你可能感兴趣的:(#,C++,常见问题,面试,链表,c++)