什么是存储管理?


编译器需要为操作系统分配一块内存。编译器使用这块内存来实现已编译的程序。这块内存被称为存储管理。编译器应该执行的任务是指定目标机器的资源,以定义源代码正在操作的数据对象。

存储管理主要包含以下三个阶段:

  • **初始分配** - 最初,每块存储空间要么是空闲的,要么正在使用。如果是空闲的,则在执行过程中可用于动态分配。存储管理系统需要几种方法来跟踪空闲存储空间以及在执行过程中根据需要进行空闲存储空间分配的结构。

  • **回收** - 当已分配并正在使用的存储空间变得可用以重用时,必须由存储管理器回收。这包括查找不再被引用的数据对象并回收该内存。

最近释放的存储空间返回到空闲空间列表很简单,它提供了可以识别和回收的存储空间。主要问题在于确定哪些元素可用于重用,因此可以恢复到空闲空间列表。

  • **压缩和重用** - 回收的存储空间可以直接用于重用,或者可能需要压缩才能从小的单元生成大的空闲存储块。随着计算的进行,存储块通过分配、回收和重用被分解成更小的单元。

空闲空间块不断细分为越来越小的单元。最终,存储分配器会达到无法满足足够大块大小请求的点,即使空闲空间列表包含比请求块多得多的空间。

因此,使用压缩将内存内容整理在一起,形成一个大的空闲块。这取决于堆中活动块是否可以移动位置,可以使用两种压缩方法。

  • **部分压缩** - 如果移动活动块的代价过高(或者活动块无法移动),则只能压缩空闲空间列表上的连续空闲块。

  • **完全压缩** - 如果活动块可以移动,则所有活动块都可以移动到堆的一端,在另一端留下一个连续的空闲块。完全压缩需要在移动活动块时更改指向该块的所有指针以指向新位置。

更新于:2021年10月23日

4K+ 浏览量

开启您的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.