什么是存储管理?
编译器需要为操作系统提供一块内存。编译器使用这块内存来实现编译后的程序。这块内存称为存储管理。编译器应该执行的是指定目标机器的资源来定义由源代码操作的数据对象。
有三个基本的存储管理阶段如下-
初始分配-最初每个存储块都是免费的或正在使用中。如果空闲,则在执行过程中可用于动态分配。存储管理系统需要多种方法来跟踪空闲存储和自由存储分配的结构,因为在执行过程中出现了需求。
恢复-已分配和正在使用的存储必须在分配的存储可用于重用时由存储管理器恢复。这涉及找到不再被引用的数据对象并回收该内存。
将最近释放的存储返回到可用空间列表很简单,提供了可以识别和恢复的存储。主要问题在于决定哪些元素可以访问以供重用,从而可以恢复到空闲空间列表。
压缩和重用-恢复的存储可以直接准备重用,或者压缩对于从小元素生成大块空闲存储至关重要。随着计算的进行,存储块通过分配、恢复和重用被分解成更小的元素。
自由空间块扩展为分成更小的元素。最终,即使空闲空间列表中包含的块数不限,但存储分配器无法识别对足够大的块请求的请求。
因此,压缩用于对内存内容进行混洗,以将所有空闲内存一起插入一个块中。根据堆中的活动块是否可以移动位置,可以使用两种压缩方法。
部分压缩-如果移动活动块的成本太高(或活动块无法转换),则只能压缩空闲空间列表上的连续空闲块。
完全压缩-如果可以转换活动块,则所有活动块都可以转换到堆的一端,在附加的连续块上留下所有空白。需要完全压缩,以便在转换活动块时,所有指向该块的指针都将更改为指向新位置。