Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 3

#include <stdio.

h>
#include <stdlib.h>
#define Free 0
#define Busy 1
#define PBusy 2
#define FINISH 1
#define ERROR 0
#define memory 512
#define min 10
typedef struct FreeArea {
int ID;
int size;
long address;
int sign;
} FreeArea;
typedef struct Node {
FreeArea data;
struct Node* prior;
struct Node* next;
} Node;
typedef Node* DLinkList;
DLinkList head;
DLinkList tail;
int Create() {
head = (DLinkList)malloc(sizeof(Node));
tail = (DLinkList)malloc(sizeof(Node));
head->prior = NULL;
head->next = tail;
tail->prior = head;
tail->next = NULL;
tail->data.address = 0;
tail->data.size = memory;
tail->data.ID = 0;
tail->data.sign = Free;
return FINISH;
}
int FirstFit(int ID, int request) {
DLinkList temp = (DLinkList)malloc(sizeof(Node));
temp->data.ID = ID;
temp->data.size = request;
temp->data.sign = Busy;
Node* p = head;
while (p) {
if (p->data.sign == Free && p->data.size == request) {
p->data.sign = Busy;
p->data.ID = ID;
return FINISH;
} else if (p->data.sign == Free && p->data.size > request && (p->data.size - request > min)) {
temp->prior = p->prior;
temp->next = p;
temp->data.address = p->data.address;
p->prior->next = temp;
p->prior = temp;
p->data.address = temp->data.address + temp->data.size;
p->data.size = p->data.size - request;
return FINISH;
} else if (p->data.sign == Free && p->data.size > request && p->data.size - request <= min) {
p->data.sign = PBusy;
p->data.ID = ID;
return FINISH;
}
p = p->next;
}
return ERROR;
}
int Allocate() {
int ID, request;
printf("进程 ID: ");
scanf("%d", &ID);
printf("输入内存请求 (KB): ");
scanf("%d", &request);
int result = FirstFit(ID, request);
if (result == FINISH)
printf("内存分配成功!\n");
else
printf("内存分配失败。空间不足或碎片化。\n");
return result;
}
void PrintMemoryStatus() {
Node* p = head;
printf("内存状态:\n");
while (p) {
printf("ID: %d, 大小: %d, 地址: %ld, Status: ", p->data.ID, p->data.size, p->data.address);
switch (p->data.sign) {
case Free:
printf("Free\n");
break;
case Busy:
printf("Busy\n");
break;
case PBusy:
printf("Fragmented\n");
break;
}
p = p->next;
}
}
int main() {
Create();
Allocate();
PrintMemoryStatus();
return 0;
}
实验心得体会
1.理解内存回收的重要性:实验让我更深刻地理解了内存回收在计算机系统中的关键作用。
有效的内存回收管理是确保系统性能和稳定性的重要组成部分。

2. 学会使用合适的算法:通过实验,我了解到不同的内存回收算法对系统的影响巨大。深
入研究了各种算法,比如首次适应、最佳适应等,以更好地满足不同场景的需求。
3. 处理内存碎片问题:内存回收涉及处理碎片问题,实验让我认识到如何最小化内存碎片
对系统性能的影响。不同的内存分配策略对于碎片的产生和处理方式有着重要的影响。
4. 实践中的问题与解决:在实验过程中,可能会遇到一些挑战,比如内存泄漏、不当的内
存释放等。这些问题提供了解决实际工程问题的机会,促使我更深入地理解内存管理的细
节。
5. 对比不同管理方式:实验通常涉及到不同的内存管理方式,例如可变分区、固定分区等。
对比这些方式,我能够评估它们在不同情境下的优劣,更好地理解其应用场景。
6. 提高编码技能:编写内存管理的实验代码帮助我提高了编码技能,理解数据结构和算法
的应用,同时也加深了对底层系统工作原理的认识。
7. 意识到安全性问题: 内存管理不仅关乎性能,还牵涉到系统的安全性。通过实验,我对
防范内存溢出等安全问题有了更加敏感的认识。
8. 团队合作与沟通:如果实验是一个团队项目,那么团队合作和沟通技能也是一个重要的
方面。在协同开发内存管理系统时,学会有效地与队友合作。
总的来说,内存回收管理的实验不仅拓展了我对计算机系统底层工作原理的理解,还培养
了解决实际问题的能力。

You might also like