如何将C++实现的First Fit内存分配代码修改为Worst Fit算法
最坏适应(Worst Fit)算法适配实现方法
你现有代码仅需要修改PutInMemory函数的空闲块查找逻辑即可完成最坏适配算法的切换,其余的内存释放、统计、打印逻辑无需改动。
核心逻辑差异说明
- 原有First Fit逻辑:从低地址开始遍历,找到第一个容量满足需求的空闲块就直接分配
- 需要修改的Worst Fit逻辑:遍历所有空闲块,记录所有容量满足需求的空闲块中容量最大的块,最终选择该块进行分配
修改后的PutInMemory函数代码
int PutInMemory(int memory[], int size) { if (size < 1) { cout << "Error!" << endl; return 0; } int maxBlockSize = 0; int maxBlockStart = -1; // 遍历所有内存,找到最大的满足需求的空闲块 for (int i = 0; i < 256; i++) { if (memory[i] < 0) { // 空闲块起始位置 int currentBlockSize = abs(memory[i]); // 如果当前块大小满足需求,且比之前记录的最大块更大,就更新记录 if (currentBlockSize >= size && currentBlockSize > maxBlockSize) { maxBlockSize = currentBlockSize; maxBlockStart = i; } // 跳过当前空闲块的剩余部分,直接到下一个块的起始位置 i += currentBlockSize - 1; } } // 没有找到符合要求的块 if (maxBlockStart == -1) { cout << "Out of Memory"; return 0; } int j = maxBlockStart; if (j + size <= 256) { memory[j] = size; for (int i = j + 1; i < j + size; i++) memory[i] = 0; int i = j + size; int count = 0; while (memory[i] <= -1 && i < 256) { count++; i++; } if (count != 0) { memory[i - 1] = -count; memory[j + size] = -count; } return j; } else { cout << "Out of memory"; return 0; } }
验证说明
替换原有代码中的PutInMemory函数即可直接运行,原有功能全部保留,分配逻辑已经切换为最坏适应算法:每次分配都会优先选择当前最大的空闲块,避免产生大量难以利用的小碎片。
内容的提问来源于stack exchange,提问作者Mohammed Hamdoon
相关产品推荐
相关产品推荐

