C++的垃圾回收

来源:互联网 发布:手机定时开关机软件 编辑:程序博客网 时间:2024/05/16 09:21

这个问题实在去哪儿网的面试的时候一个面试官问到的一个问题,当时真的是一脸懵逼,只听说过JAVA的垃圾回收机制,没听过关于C++的垃圾回收啊,所以下来之后自己又了解了一下。

首先,C++一定是可以进行垃圾回收的。我们可以通过扫描并且标记内存中所有可能被使用的内存块,然后将已经分配出去的内存块中的没有被标记的内存块回收回来。但是要怎样才能扫描出所有可能被使用的内存块?

首先,通过扫描内存的数据,能够识别出指向堆上动态分配出来内存的指针,如果有识别错误,也只能是把不是指针的数据当成指针,不会把指针当成非指针数据,也就是说只可能漏回收内存块,而不会把正在使用的内存块回收。其次,所有内存块被引用的根,只可能存在与全局变量和当前的栈内,而全局变量都是集中于bss段和data段中,所以只要扫描bss段,data段以及当前使用的栈空间就可以得到当前正在使用的所有动态内存。

关于C++需要学习的东西很多,所以加油吧骚年!

原创粉丝点击