用c语言编写最先适应分配法:内存申请函数
时间: 2023-11-29 21:07:16 浏览: 40
最先适应分配算法(First Fit Allocation Algorithm)是一种简单的内存分配算法,它从内存的起始位置开始查找,找到第一个能够满足请求的空闲区域进行分配。下面是用C语言编写的最先适应分配算法的内存申请函数:
```c
#include <stdio.h>
#include <stdlib.h>
#define MEM_SIZE 1024 // 内存大小
char memory[MEM_SIZE]; // 内存池
// 内存块结构体
typedef struct mem_block {
int size; // 内存块大小
int start; // 内存块起始地址
struct mem_block *next; // 下一个内存块的指针
} MemBlock;
MemBlock *free_list = NULL; // 空闲链表
// 初始化空闲链表
void init_free_list() {
if (free_list != NULL) {
return;
}
free_list = (MemBlock *)malloc(sizeof(MemBlock));
free_list->size = MEM_SIZE;
free_list->start = 0;
free_list->next = NULL;
}
// 内存申请函数
void *my_malloc(int size) {
if (size <= 0) {
return NULL;
}
init_free_list(); // 初始化空闲链表
MemBlock *prev = NULL;
MemBlock *curr = free_list;
while (curr != NULL) {
if (curr->size >= size) {
// 找到了合适的空闲块
void *ptr = memory + curr->start;
if (curr->size == size) {
// 空闲块大小刚好等于申请大小
if (prev == NULL) {
// 第一个空闲块就满足要求
free_list = curr->next;
} else {
prev->next = curr->next;
}
} else {
// 空闲块大小大于申请大小
curr->size -= size;
curr->start += size;
}
return ptr;
}
prev = curr;
curr = curr->next;
}
// 没有找到合适的空闲块
return NULL;
}
```
该函数的基本思路是从空闲链表中查找第一个能够满足请求的空闲块,然后将其分配给申请者。如果空闲块大小刚好等于申请大小,则直接从空闲链表中删除该块;否则,将该块的大小减去申请大小,并将起始地址修改为当前申请的地址。如果没有找到合适的空闲块,则返回NULL。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)