C语言内存的动态存储管理3-分配算法和回收
来源:互联网 发布:武汉淘宝商学院怎么样 编辑:程序博客网 时间:2024/05/19 00:40
对于内存块大小不同的空闲链表,假如有一个大小为N的内存申请,如果空闲链表中大于N的内存只有一块,假如大小为M,就把M的一部分分配给用户,同时把剩余的M-N的部分作为一个节点插入到空闲链表中。
当大于N的内存有多块时,我们该如何分配呢?通常有以下三种方法:
(1)最先适配法。顾名思义,顺序扫描空闲链表,找到第一个大于等于N的空闲块,把其中的N分配给用户。因为链表不按内存的地址有序,也不按大小有序,所以回收内存块放到表头即可。
问题:运行一段时间后,链表中将会出现一些非常小的块,并在这些小块都在链表的前边。
(2)最优适配法。在空闲链表中找到一个不小于N并且最接近N的空闲块分配给用户。分配时需要整表扫描。如果链表按空闲块从小到大有序,分配时只需找到第一个大于N的空闲块,回收时需要插入到链表合适的位置上。
(3)最差适配法。将链表中不小于N且是链表中最大的空闲块的一部分分配给用户。链表可按空闲块从大到小的顺序排列,分配只需判断链表第一个空闲块即可,回收时需要插入到链表合适的位置上。
对于回收,我们考虑的不仅仅是归还节点,还要考虑空闲块的合并问题。这种把物理地址相邻的空闲块的合并以取得更大的空闲块的方法是需要的。空闲链表中的空闲块并不是按物理地址有序的,那又如何快速合并呢?下篇中将讨论一种方法:边界标识法。
- C语言内存的动态存储管理3-分配算法和回收
- C/C++动态内存分配和回收
- C语言——存储类和动态内存分配
- 存储管理动态分区分配及回收算法
- 操作系统:存储管理动态分区分配及回收算法
- 【OS课程设计一】动态分区式存储管理的存储分配和回收
- 动态内存分配和回收
- 数据结构和算法C语言实现:链表的实现(基于动态内存分配)
- 可变分区存储管理的内存分配与回收
- C和C++ 语言动态内存分配
- C和C++ 语言动态内存分配
- C和C++ 语言动态内存分配
- C和C++ 语言动态内存分配
- c语言动态内存分配和使用
- C和C++ 语言动态内存分配
- C语言动态和静态内存分配
- C语言内存的动态存储管理1-概述
- C语言的动态内存分配
- jsp基础语法(中)
- 结构体数组到底要不要分配内存
- JSP基础语法(下)
- eclipse打包插件 fat jar
- Grub命令使用详解
- C语言内存的动态存储管理3-分配算法和回收
- Log4j详解配置
- TCP/IP 详解 卷1 ch10 Dynamic Routing Protocols
- 用U盘装系统
- 积分没了
- Tokyo Cabinet 安装测试
- cvaux.h
- jq 对节点操作
- tokyo tyrant 安装日志