<b>浅议C++的垃圾回收办法</b>[VC/C++编程]
本文“<b>浅议C++的垃圾回收办法</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
很多 C 大概 C++ 程序员对垃圾回收嗤之以鼻,认为垃圾回收必定比自己来管理动态内存要低效,并且在回收的时刻一定会让程序停顿在那边,而假如自己掌握内存管理的话,分配和释放时间都是安定的,不会招致程序停顿.最后,很多 C/C++ 程序员坚信在C/C++ 中无法实现垃圾回收机制.这些错误的概念都是由于不理解垃圾回收的算法而臆想出来的.
其实垃圾回收机制并不慢,乃至比动态内存分配更高效.因为我们可以只分配不释放,那么分配内存的时刻只需求从堆上一向的得到新的内存,移动堆顶的指针就够了;而释放的历程被省略了,自然也加快了速度.现代的垃圾回收算法已经发展了很多,增量汇集算法已经可以让垃圾回收历程分段举行,避免打断程序的运行了.而传统的动态内存管理的算法一样有在得当的时间汇集内存碎片的工作要做,并不比垃圾回收更有上风.
而垃圾回收的算法的底子普通基于扫描并标志当前大概被利用的全部内存块,从已经被分配的全部内存中把未标志的内存回收来做的.C/C++ 中无法实现垃圾回收的概念普通基于无法精确扫描出全部大概还会被利用的内存块,但是,看似不大概的事情实际上实现起来却并不复杂.首先,通过扫描内存的数据,指向堆上动态分配出来内存的指针是很简单被辨认出来的,假若有辨认错误,也只能是把一些不是指针的数据当作指针,而不会把指针当作非指针数据.这样,回收垃圾的历程只会漏回收掉而不会错误的把不该该回收的内存清理.其次,假如回溯全部内存块被引用的根,只大概存在于全局变量和当前的栈内,而全局变量(包含函数内的静态变量)都是集合存在于 bss 段或 data段中.
垃圾回收的时刻,只需求扫描 bss 段, data 段以及当前被利用着的栈空间,找到大概是动态内存指针的量,把引用到的内存递归扫描便可以得到当前正在利用的全部动态内存了.
假如肯为你的工程实现一个不错的垃圾回收器,提高内存管理的速度,乃至削减总的内存损耗都是大概的.假若有爱好的话,可以搜索一下网上已有的关于垃圾回收的论文和实现了的库,开辟视野对一个程序员尤为重要.
以上是“<b>浅议C++的垃圾回收办法</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |