C语言数据结构:动态存储管理

本文探讨了动态存储管理在操作系统和编译程序中的重要性,重点介绍了如何分配和回收内存,以及动态存储管理的三种策略:首次拟合法、最佳拟合法和最差拟合法。此外,还提到了可利用空间表的重要性以及结点合并的问题,以提高内存利用率。
摘要由CSDN通过智能技术生成

        对操作系统和编译程序来说,存储管理都是一个复杂而又重要的问题。不同语言的编译程序和不同的操作系统可以采用不同的存储管理方法。

        动态存储管理的基本问题是系统如何应用户提出的"请求”分配内存?又如何回收那些用户不再使用而“释放”的内存,以备新的“请求”产生时重新进行分配?提出请求的用户可能是进入系统的一个作业,也可能是程序执行过程中的一个动态变量。因此,在不同的动态存储管理系统中,请求分配的内存量大小不同。通常在编译程序中是一个或几个字,而在系统中则是几千,几万,甚至是几十万。然而,系统每次分配给用户(不论大小)都是一个地址连续的内存区。为了方便起见,在下面的文章中,将统称已分配给用户使用的地址连续的内存区为“占用块”,称未曾分配的地址连续的内存区为“可利用空间块”或“空闲块”。

        显然,不管什么样的动态存储管理系统,在刚开工时,整个内存区是一个“空闲块”(在编译程序中称之为“堆”)。随着用户进入系统,先后提出存储请求,系统则依次进行分配。因此,在系统运行的初期,整个内存区基本上分隔成两大部分:低地址区包含若干占用块;高地址区(即分配后的剩余部分)是一个“空闲块”。例如图1(a)所示为依次给8个用户进行分配后的系统的内存状态。经过一段时间以后,有的用户运行结束,它所占用的内存区变成空闲块,这就使整个内存区呈现出占用块和空闲块犬牙交错的状态。如图1(b)

图1  动态存储分配过程种的内存状态:(a)系统运行初期(b)系统运行若干时间之后

         假如此时又有新的用户进入系统请求分配内存,那么,系统将如何做呢?</

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值