下载此文档

C语言中的垃圾回收分析.doc


文档分类:IT计算机 | 页数:约6页 举报非法文档有奖
1/6
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/6 下载此文档
文档列表 文档介绍
C语言中的垃圾回收分析.docC语言中的垃圾回收分析
摘要:c语言没有运行时库,无法自动压缩使用中的内存,缩小堆栈 所需内存空间。若只申请内存,没有释放,势必造成系统内存不断减少、 丢失。长时间的运行,最终导致系统死机。文章阐述了c语言垃圾产生的 原因,并从引用计数、标记一清除算法两方面提出如何实现c语言的垃圾 回收。
关键词:c语言;垃圾回收;引用计数;标记一清除算法
一般来说,操作系统记录了所有进程使用的全部资源,当系统进程结 束时,操作系统会将其所有资源回收,包括内存、寄存器和CPU等所使用 的资源。对于许多大型系统来说,一个进程或者程序往往会运行很长时间, 如网站进程、守护进程等。操作系统不会主动释放这种进程所占用的资源。 如果进程在使用完后内存资源却没有及时释放,就会造成系统内存不断减 少、丢失,累积到一定程度,会导致系统无内存可用,进而导致系统无法 运行或者错误,严重的甚至死机。
C语言是一种可以直接与操作系统底层交互的语言,它没有运行时库。 运行时库可以压缩使用中的内存,缩小堆栈所需内存空间。因此C语言编 程中的内存管理依赖程序编写人员。因此,本文将详细阐述C语言中的垃 圾回收问题,并阐明其产生原因和常用的回收技术等,以帮助基于c语言 的程序开发者更好地设计和实现高效的垃圾回收机制。
1C语言中垃圾产生的原因
在C语言开发中,内存分配有3种方式:一是函数体内的局部变量, 在栈上创建。如void fun () {int a; },变量a在函数fun ()执
行结束时会自动释放。二是静态存储区域分配。如static int x=l;变量 x为静态变量,生存期较长,从第1次使用就始终存在,直到整个程序结 束时自动释放。三是动态内存分配,在堆上分配,通过malloc或calloc 申请,通过free释放。此种方式比前2种在内存使用上更加灵活,是编 写大型程序不可缺少的内存分配方式。但是它却存在一个致命的风险。在 一个函数体内通过malloc或calloc申请的动态内存由另外一个函数体使 用,程序员很容易忘记在使用后通过free释放,该内存块将保持在系统 内并一直处于被分配状态,导致后面程序可申请的内存空间严重不足。并 且这种情况下,也很难查找出内存泄露发生在什么地方。这些内存块被称 为垃圾。因此在C语言程序中,引入了垃圾收集器概念,它是一种动态存 储分配器,可定期识别垃圾块,并相应地调用free函数,将这些垃圾块 回收到空闲的内存链表中。
2 C语言中垃圾回收基本原理
垃圾回收因高级编程语言迅猛发展而得到广大程序员的重视,但实际 上垃圾回收的历史最早始于1960年的Lisp语言。Lisp语言高度依赖动态 内存分配,所有数据几乎都是在堆上分配的。程序设计者必须找到一种方 法来自动管理每一块内存,否则程序员会被数不清的“申请内存”和“释 放内存”淹没,或者计算机内存很快被消耗殆尽,这促使垃圾回收技术的
产生。
一个垃圾回收模块有3个基本要求:无内存泄漏;能够自动回收无用 内存;能够内存整理或内存紧缩。
程序中所有已分配的内存都有其对应的指针指向它,若一块内存没有 任何指针指向它,称为内存泄漏,即该块内存是无用内存块且不可达。在 程序运行的任意状态中,寄存器(考虑多核CPU在多线程下)、程序栈和 静态数据段中所有指针的集合叫根集。可达指的是这块

C语言中的垃圾回收分析 来自淘豆网m.daumloan.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数6
  • 收藏数0 收藏
  • 顶次数0
  • 上传人蓝天
  • 文件大小86 KB
  • 时间2021-06-30