浅议C 中的垃圾回收方法
2008-02-23 05:24:11来源:互联网 阅读 ()
其实垃圾回收机制并不慢,甚至比动态内存分配更高效。因为我们能够只分配不释放,那么分配内存的时候只需要从堆上一直的获得新的内存,移动堆顶的指针就够了;而释放的过程被省略了,自然也加快了速度。现代的垃圾回收算法已发展了很多,增量收集算法已能够让垃圾回收过程分段进行,避免打断程式的运行了。而传统的动态内存管理的算法同样有在适当的时间收集内存碎片的工作要做,并不比垃圾回收更有优势。
而垃圾回收的算法的基础通常基于扫描并标记当前可能被使用的任何内存块,从已被分配的任何内存中把未标记的内存回收来做的。C/C 中无法实现垃圾回收的观点通常基于无法正确扫描出任何可能还会被使用的内存块,但是,看似不可能的事情实际上实现起来却并不复杂。首先,通过扫描内存的数据,指向堆上动态分配出来内存的指针是很容易被识别出来的,假如有识别错误,也只能是把一些不是指针的数据当成指针,而不会把指针当成非指针数据。这样,回收垃圾的过程只会漏回收掉而不会错误的把不应该回收的内存清理。其次,假如回溯任何内存块被引用的根,只可能存在于全局变量和当前的栈内,而全局变量(包括函数内的静态变量)都是集中存在于 bss 段或 data段中。
垃圾回收的时候,只需要扫描 bss 段, data 段连同当前被使用着的栈空间,找到可能是动态内存指针的量,把引用到的内存递归扫描就能够得到当前正在使用的任何动态内存了。
假如肯为您的工程实现一个不错的垃圾回收器,提高内存管理的速度,甚至减少总的内存消耗都是可能的。假如有兴趣的话,能够搜索一下网上已有的关于垃圾回收的论文和实现了的库,开拓视野对一个程式员尤为重要。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: 踏入C 中的雷区——C 内存管理详解
下一篇: 保持C/C 程式代码的可伸缩性
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash