严蔚敏教材:动态存储管理 - Malloc_Fdlf与Free_Fdlf算法详解

需积分: 9 0 下载量 185 浏览量 更新于2024-09-20 收藏 26KB DOC 举报
本章节主要讨论的是严蔚敏教材中的动态存储管理相关内容,涉及到三个关键部分:内存分配算法、内存释放算法以及边界标识法的回收操作。 1. **空闲块管理结构**: - 定义了一个名为`fmblock`的结构体,它包含两个成员:`char* start`表示空闲块的起始地址,`int size`表示空闲块的大小。这是动态存储管理的基本单元,用于跟踪和操作内存空间。 2. **内存分配算法(Malloc_Fdlf)**: - 使用最后分配者优先(Last In, First Out, LIFO)策略,即遵循“谁分配的先释放”的原则。该函数首先检查栈`S`中是否有足够大的空闲块。如果没有,则返回`NULL`。如果找到合适大小的空闲块,会减小其大小并将其分割成两部分,一部分用于分配,另一部分继续保留在栈中。最后,将剩余的空闲块恢复到原始顺序,以便后续释放。 3. **内存释放算法(Free_Fdlf)**: - 释放内存时,首先在按地址排序的栈`T`中找到指定地址`addr`的合适位置,并可能与相邻的空闲块合并以减少碎片。合并后,将释放的块添加到`S`栈中,保持原有顺序。 4. **边界标识法(Boundary Tagging)的回收**: - 在边界标识法中,每个空闲块在其起始和结束位置都有标记(`tag`)。`Free_BT`函数接收两个参数,`pav`和`p`,用于回收空闲块`p`及其相邻的空闲块。首先获取空闲块的大小`n`,然后从`p`的底部`f`开始检查边界标记,确保回收操作的正确性。如果有相邻的空闲块可以合并,就执行合并操作。 5. **初始化过程(mem_init)**: - 通过初始化两个栈`S`和`T`,并将其置为空闲块列表,以及将整个内存区域作为一个初始的、大块的空闲区加入栈`S`,为后续的内存分配和回收做好准备。 这些算法和数据结构展示了动态存储管理的核心原理,包括空闲块的维护、内存分配和释放的策略,以及如何利用边界标识来优化内存回收。它们在操作系统、编程语言运行时系统以及内存管理软件中具有重要应用。理解并掌握这些概念有助于提高程序性能,减少内存碎片,并有效地管理有限的系统内存资源。