📄 algorithm.c
字号:
// algorithm.c 设置内存分配算法
// 2007.12.15
extern int ma_algorithm;
extern struct free_block_type *free_block;
//设置内存分配算法
set_algorithm()
{
int algorithm;
page_c();
printf(" 设置内存分配算法\n");
printf("--------------------------------------------\n");
printf("\t1 - 最先适应算法(First Fit)\n");
printf("\t2 - 最佳适应算法(Best Fit)\n");
printf("\t3 - 最坏适应算法(Worst Fit)\n");
printf("--------------------------------------------\n");
printf("请选择:");
scanf("%d", &algorithm);
if(algorithm>=1 && algorithm <=3) ma_algorithm=algorithm;
rearrange(ma_algorithm); //按指定算法重新排列空闲区链表
return 0;
}
rearrange(int algorithm)
{
switch(algorithm)
{
case 1:rearrange_FF();break;
case 2:rearrange_BF();break;
case 3:rearrange_WF();break;
default:break;
}
return 0;
}
//最先适应算法
rearrange_FF(){
struct free_block_type *tmp, *work;
tmp = free_block;
//把原来的空闲区链表按地址递增的顺序重新排列;
while(tmp!=NULL)
{
work = tmp->next;
while(work!=NULL){
if( work->start_addr < tmp->start_addr)
{ /*地址递增*/
swap(&work->start_addr, &tmp->start_addr);
swap(&work->size, &tmp->size);
}
else
work=work->next;
}
tmp=tmp->next;
}
return 0;
}
//最佳适应算法
rearrange_BF(){
struct free_block_type *tmp, *work;
tmp = free_block;
//把原来的空闲区链表按空间大小递增的顺序重新排列;
while(tmp!=NULL)
{
work = tmp->next;
while(work!=NULL){
if( work->size < tmp->size)
{ /*地址递增*/
swap(&work->start_addr, &tmp->start_addr);
swap(&work->size, &tmp->size);
}
else
work=work->next;
}
tmp=tmp->next;
}
return 0;
}
//最坏适应算法
rearrange_WF(){
struct free_block_type *tmp, *work;
tmp = free_block;
//把原来的空闲区链表按空间大小递减的顺序重新排列;
while(tmp!=NULL)
{
work = tmp->next;
while(work!=NULL){
if( work->size > tmp->size)
{ /*地址递增*/
swap(&work->start_addr, &tmp->start_addr);
swap(&work->size, &tmp->size);
}
else
work=work->next;
}
tmp=tmp->next;
}
return 0;
}
swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -