6.6堆式管理和垃圾回收技术 在设计实际软件系统时,除了子程序调用和部分缓冲区管理等算法符合这一要求之外,大量内存分配是以随机的方式进行的,因此不符合栈式管理的要求。 这种显式存储管理的代码通常需要程序员在设计程序时直接编写,而无法由编译器自动插入。实现显式存储管理的一种有效方法,就是所谓的“堆式内存管理”。 实际上,和堆相关的管理并不都是显式的。垃圾收集技术的主要目的就是提供程序员不可见的堆内存回收机制,从而避免错误的堆空间释放引起的内存访问错误。 堆式存储管理的基本要求 第一,堆(Heap)是一种组织内存的有效方法。与栈式分配由编译器产生的代码自动分配和释放不同,程序员需要自己编写代码来实现对堆空间的分配与释放。 第二,堆空间的分配和释放必须成对出现。因此,无论是引用未分配堆空间上的存储单元(例如C语言程序中的未初始化的指针变量),或是忘记释放和多次释放堆空间上的内存都可能导致堆访问的问题。引用未分配空间或多次释放堆空间,可能引起内存访问异常;而忘记释放堆空间则会引起内存泄漏问题。 堆式管理的主要形式 第一种,采用外部堆管理支持。C语言是这种方法的典型代表。C语言本身并不支持堆存储管理;但C支持指针机制,可为访问堆空间提供直接支持。C语言通过标准库的方式提供对堆式内存管理的支持。 第二种,采用内置存储管理语句的方式支持。例如C++语言所支持的new和delete语句。编译

文档评论(0)

1亿VIP精品文档

相关文档