📄 allot.c
字号:
void allot(int task_no, float size)
{
int i, k, first_meet;
float ad, xk;
k = -1;
first_meet = 1;
xk = size;
i = 0;
while (i < FREE_TABLE_LEN)
{
if (free_table[i].flag && (free_table[i].length >= size)) {
if (first_meet || (free_table[i].length < free_table[k].length)) {
k = i;
}
i++;
}
else {
i++;
}
}
if (k == -1) {
printf("没有合适的空闲区,分配失败!\n");
return;
}
else {
if (free_table[k].length - size <= MINSIZE) {
free_table[k].flag = 0;
ad = free_table[k].address;
xk = free_table[k].length;
}
else {
free_table[k].length -= size;
ad = free_table[k].address + free_table[k].length;
}
i = 0;
for (; used_table[i].flag != 0; i++);
if (i < USED_TABLE_LEN) {
used_table[i].address = ad;
used_table[i].length = xk;
used_table[i].flag = task_no;
printf("分配成功!\n");
return;
}
else {
if (free_table[k].flag == 0) {
free_table[k].flag = 1;
}
else {
free_table[k].length += xk;
printf("分配区已满,分配失败\n");
return;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -