优化以下代码:void Set_PCBs(PCB* pcb) { PCB* temp = pcb; for (int i = 0; i < numOfProcs; i++) { temp->pid = i; temp->neededMem = memLB + rand() % (memUB - memLB + 1); temp->status = -1; temp->blockID = -1; if (i != numOfProcs - 1) { temp->next = (PCB*)malloc(sizeof(PCB)); temp = temp->next; continue; } temp->next = NULL; } Sort_PCBs(pcb); return; }
时间: 2024-04-26 19:20:27 浏览: 140
可以优化的地方如下:
1. 避免在循环中调用 rand 函数,可以在循环前先生成所有需要的随机数,然后再进行循环。
2. 可以在内存分配时,一次性分配所有需要的内存,而不是在每次循环中分配内存。
3. 在循环中使用了 continue 语句,可以避免使用 continue 语句,而是使用 if-else 语句。
下面是优化后的代码:
void Set_PCBs(PCB* pcb) {
PCB* temp = pcb;
int* randNums = (int*)malloc(numOfProcs * sizeof(int)); // 生成所有需要的随机数
for (int i = 0; i < numOfProcs; i++) {
randNums[i] = memLB + rand() % (memUB - memLB + 1);
}
for (int i = 0; i < numOfProcs; i++) {
temp->pid = i;
temp->neededMem = randNums[i]; // 直接使用预先生成的随机数
temp->status = -1;
temp->blockID = -1;
if (i != numOfProcs - 1) {
temp->next = (PCB*)malloc(sizeof(PCB));
temp = temp->next;
} else {
temp->next = NULL;
}
}
Sort_PCBs(pcb);
free(randNums); // 释放内存
return;
}
阅读全文